ETH Price: $3,164.62 (-7.44%)
Gas: 5 Gwei

Token

DexBot (DEXBOT)
 

Overview

Max Total Supply

80,000,000 DEXBOT

Holders

658

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Filtered by Token Holder
vincentliu.eth
Balance
64,906.757756009543877777 DEXBOT

Value
$0.00
0xc03f20c45585240a737bc7d6c206ee59a46460c1
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:
DexBot

Compiler Version
v0.8.12+commit.f00d7308

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

// SPDX-License-Identifier: MIT

pragma solidity ^0.8.12;


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

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

abstract contract Ownable is Context {
    address private _owner;

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

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

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

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

    /**
     * @dev Throws if the sender is not the owner.
     */
    function _checkOwner() internal view virtual {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
    }

    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions. 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 {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        _transferOwnership(newOwner);
    }

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

interface 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 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);

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

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

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

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

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

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

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

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

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

    /**
     * @dev Sets the values for {name} and {symbol}.
     *
     * All two of these values are immutable: they can only be set once during
     * construction.
     */
    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }

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

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

    /**
     * @dev Returns the number of decimals used to get its user representation.
     * For example, if `decimals` equals `2`, a balance of `505` tokens should
     * be displayed to a user as `5.05` (`505 / 10 ** 2`).
     *
     * Tokens usually opt for a value of 18, imitating the relationship between
     * Ether and Wei. This is the 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 override returns (uint8) {
        return 18;
    }

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

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

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

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

    /**
     * @dev See {IERC20-approve}.
     *
     * NOTE: If `amount` 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 amount) public virtual override returns (bool) {
        address owner = _msgSender();
        _approve(owner, spender, amount);
        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 `amount`.
     * - the caller must have allowance for ``from``'s tokens of at least
     * `amount`.
     */
    function transferFrom(address from, address to, uint256 amount) public virtual override returns (bool) {
        address spender = _msgSender();
        _spendAllowance(from, spender, amount);
        _transfer(from, to, amount);
        return true;
    }

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

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

        return true;
    }

    /**
     * @dev Moves `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.
     *
     * Requirements:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `from` must have a balance of at least `amount`.
     */
    function _transfer(address from, address to, uint256 amount) internal virtual {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");

        _beforeTokenTransfer(from, to, amount);

        uint256 fromBalance = _balances[from];
        require(fromBalance >= amount, "ERC20: transfer amount exceeds balance");
        unchecked {
            _balances[from] = fromBalance - amount;
            // Overflow not possible: the sum of all balances is capped by totalSupply, and the sum is preserved by
            // decrementing then incrementing.
            _balances[to] += amount;
        }

        emit Transfer(from, to, amount);

        _afterTokenTransfer(from, to, amount);
    }

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

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

        _totalSupply += amount;
        unchecked {
            // Overflow not possible: balance + amount is at most totalSupply + amount, which is checked above.
            _balances[account] += amount;
        }
        emit Transfer(address(0), account, amount);

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

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

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

        uint256 accountBalance = _balances[account];
        require(accountBalance >= amount, "ERC20: burn amount exceeds balance");
        unchecked {
            _balances[account] = accountBalance - amount;
            // Overflow not possible: amount <= accountBalance <= totalSupply.
            _totalSupply -= amount;
        }

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

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

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

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

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

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

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

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

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

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


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

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

contract DexBot is Ownable, ERC20 {

    address public constant DEAD_ADDRESS = 0x000000000000000000000000000000000000dEaD;

    IUniswapV2Router02 public immutable uniswapV2Router;

    bool swapping;
    bool public exchangeable;
    bool public transferable;
    bool public maxLimited;
    bool public botLimited;
    address public team;
    address public rewardPool;
    address public burnAddress;
    address public exToken;
    uint256 public buyFeeRate;
    uint256 public sellFeeRate;
    uint256 public totalFeeAmount;
    uint256 public swapAmount;
    uint256 public swapShare;
    uint256 public burnShare;
    uint256 public teamShare;
    uint256 public burnLimit;
    uint256 public maxHoldingAmount;
    mapping (address => mapping(address => uint256)) public balanceFromPool;
    mapping (address => bool) public uniswapPool;
    mapping (address => bool) public blacklist;
    mapping (address => bool) public dutyFree;
    mapping (address => uint256) public lastTradingBlock;

    event Exchanged(address indexed owner, uint256 indexed amount);
    event SwapAmountSet(address indexed owner, uint256 indexed amount);
    event TeamSet(address indexed owner, address indexed account);
    event BurnAddressSet(address indexed owner, address indexed account);
    event ShareSet(address indexed owner, uint256 swapShare, uint256 burnShare, uint256 teamShare);
    event RewardPoolSet(address indexed owner, address indexed account);
    event LimitSet(address indexed owner, bool indexed limited, uint256 indexed amount);
    event PoolSet(address indexed owner, address indexed account, bool indexed value);
    event DutyFreeSet(address indexed owner, address indexed account, bool indexed value);
    event FeeRateSet(address indexed owner, uint256 indexed buyFeeRate, uint256 indexed sellFeeRate);
    event BurnLimitSet(address indexed owner, uint256 burnLimit);
    event BlacklistSet(address indexed owner, address[] accounts);
    event BlacklistRemoved(address indexed owner, address[] accounts);

    constructor(address _token, uint256 _totalSupply) ERC20("DexBot", "DEXBOT") {
        uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
       
        exchangeable = true;
        maxLimited = false;
        botLimited = true;
        swapping = false;

        swapAmount = (_totalSupply * 25) / 10000; 
        maxHoldingAmount = _totalSupply;

        swapShare = 0.2 ether;
        burnShare = 0.4 ether;
        teamShare = 0.4 ether;

        burnLimit = _totalSupply / 10;

        buyFeeRate = 0.05 ether;
        sellFeeRate = 0.05 ether;
        
        exToken = _token;
        team = msg.sender;
        burnAddress = msg.sender;

        dutyFree[msg.sender] = true;
        dutyFree[address(this)] = true;

        _mint(msg.sender, _totalSupply);
    }

    fallback() external payable {}

    receive() external payable {}

    function exchange(uint256 amount) external {
        require(exchangeable, "non exchangeable");

        IERC20(exToken).transferFrom(msg.sender, DEAD_ADDRESS, amount);
        IERC20(address(this)).transfer(msg.sender, amount);

        emit Exchanged(msg.sender, amount);
    }

    function setExchangeable() external onlyOwner {
        exchangeable = !exchangeable;
    }

    function setTransferable() external onlyOwner {
        transferable = !transferable;
    }

    function withdrawToken(address token, address to) external onlyOwner {
        require(token != address(0), "token address cannot be zero address");
        uint256 balance = IERC20(token).balanceOf(address(this));
        IERC20(token).transfer(to, balance);
    }

    function withdrawEth(address to) external onlyOwner {
        (bool success, ) = to.call{value: address(this).balance}(new bytes(0));
        require(success, "eth transfer failed");
    }

    function setMaxLimit(bool _limited, uint256 _amount) external onlyOwner {
        maxLimited = _limited;
        maxHoldingAmount = _amount;
        emit LimitSet(msg.sender, maxLimited, maxHoldingAmount);
    }

    function setBotLimited() external onlyOwner {
        botLimited = !botLimited;
    }

    function setPool(address account) external onlyOwner {
        uniswapPool[account] = !uniswapPool[account];
        emit PoolSet(msg.sender, account, uniswapPool[account]);
    }

    function setTeam(address account) external onlyOwner {
        dutyFree[team] = false;

        team = account;
        dutyFree[team] = true;

        emit TeamSet(msg.sender, team);
    }

    function setRewardPool(address account) external onlyOwner {
        rewardPool = account;
        emit RewardPoolSet(msg.sender, rewardPool);
    }

    function setBurnAddress(address account) external onlyOwner {
        burnAddress = account;
        emit BurnAddressSet(msg.sender, burnAddress);
    }

    function setDutyFree(address account) public onlyOwner {
        dutyFree[account] = !dutyFree[account];
        emit DutyFreeSet(msg.sender, account, dutyFree[account]);
    }

    function setFeeRate(uint256 _buyFeeRate, uint256 _sellFeeRate) external onlyOwner {
        buyFeeRate = _buyFeeRate;
        sellFeeRate = _sellFeeRate;
        emit FeeRateSet(msg.sender, _buyFeeRate, _sellFeeRate);
    }

    function setBurnLimit(uint256 _burnLimit) external onlyOwner {
        burnLimit = _burnLimit;
        emit BurnLimitSet(msg.sender, _burnLimit);
    }

    function setSwapAmount(uint256 _swapAmount) external onlyOwner {
        swapAmount = _swapAmount;
        emit SwapAmountSet(msg.sender, _swapAmount);
    }

    function setShare(uint256 _swapShare, uint256 _burnShare, uint256 _teamShare) external onlyOwner {
        uint256 totalShare = _swapShare+_burnShare+_teamShare;
        require(totalShare == 1 ether, "forbid");
        swapShare = _swapShare;
        burnShare = _burnShare;
        teamShare = _teamShare;
        emit ShareSet(msg.sender, swapShare, burnShare, teamShare);
    }

    function _beforeTokenTransfer(address from, address to, uint256 amount) internal override {
        require(!blacklist[to] && !blacklist[from], "blacklisted");

        if (!transferable) {
            require(from == owner() || to == owner(), "trading is not started");
            return;
        }

        if (maxLimited && uniswapPool[from]) {
            require(balanceFromPool[to][from] + amount <= maxHoldingAmount, "buy limit");
            balanceFromPool[to][from] += amount;
        }
    }

    function _transfer(address from, address to, uint256 amount) internal override {
        if (!swapping && !uniswapPool[from]) {
            swapping = true;
            _swapBack();
            swapping = false;
        }

        uint256 feeRate = 0;
        if (uniswapPool[from]) {
            if (botLimited) {
                require(lastTradingBlock[to] != block.number, "bot limit");
                lastTradingBlock[to] = block.number;
            }

            if (!dutyFree[to]) {
                feeRate = buyFeeRate;
            }
        } else if (uniswapPool[to]) {
            if (botLimited) {
                require(lastTradingBlock[from] != block.number, "bot limit");
                lastTradingBlock[from] = block.number;
            }

            if (!dutyFree[from]) {
                feeRate = sellFeeRate;
            }
        }

        if (feeRate > 0 && amount > 0) {
            uint256 fee = amount * feeRate / 1 ether;
            totalFeeAmount += fee;
            super._transfer(from, address(this), fee);
            amount -= fee;
        }
    

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

    function _swapBack() internal {
        if (totalFeeAmount <= swapAmount) {
            return;
        }

        bool success;

        uint256 amountToBurn = totalFeeAmount * burnShare / 1 ether;
        uint256 amountToTeam = totalFeeAmount * teamShare / 1 ether;
        uint256 amountToShare = totalFeeAmount * swapShare / 1 ether;

        uint256 halfAmountToTeam = amountToTeam / 2;

        uint256 amountToSwap = amountToShare + halfAmountToTeam;

        uint256 initialETHBalance = address(this).balance;

        _swapTokensForEth(amountToSwap);

        uint256 halfETHBalance = (address(this).balance - initialETHBalance) / 2;

        (success, ) = team.call{value: halfETHBalance}(new bytes(0));
        require(success, "eth transfer failed");

        (success, ) = rewardPool.call{value: halfETHBalance}(new bytes(0));
        require(success, "eth transfer failed");

        if( totalSupply() >= burnLimit){
            IERC20(address(this)).transfer(burnAddress, amountToBurn);
        }

        IERC20(address(this)).transfer(team, halfAmountToTeam);

        totalFeeAmount = 0;
    }

    function _swapTokensForEth(uint256 amount) internal {
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();

        if (allowance(address(this), address(uniswapV2Router)) < amount) {
            _approve(address(this), address(uniswapV2Router), type(uint256).max);
        }

        uniswapV2Router.swapExactTokensForETH(amount, 0, path, address(this), block.timestamp);
    }

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

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"uint256","name":"_totalSupply","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":false,"internalType":"address[]","name":"accounts","type":"address[]"}],"name":"BlacklistRemoved","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":false,"internalType":"address[]","name":"accounts","type":"address[]"}],"name":"BlacklistSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"account","type":"address"}],"name":"BurnAddressSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":false,"internalType":"uint256","name":"burnLimit","type":"uint256"}],"name":"BurnLimitSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"DutyFreeSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Exchanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"uint256","name":"buyFeeRate","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"sellFeeRate","type":"uint256"}],"name":"FeeRateSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"bool","name":"limited","type":"bool"},{"indexed":true,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"LimitSet","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":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"PoolSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"account","type":"address"}],"name":"RewardPoolSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":false,"internalType":"uint256","name":"swapShare","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"burnShare","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"teamShare","type":"uint256"}],"name":"ShareSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"SwapAmountSet","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"account","type":"address"}],"name":"TeamSet","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"},{"stateMutability":"payable","type":"fallback"},{"inputs":[],"name":"DEAD_ADDRESS","outputs":[{"internalType":"address","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":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"address","name":"","type":"address"}],"name":"balanceFromPool","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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":"","type":"address"}],"name":"blacklist","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"botLimited","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"value","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"burnAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"burnLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"burnShare","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyFeeRate","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":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"dutyFree","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"exToken","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"exchange","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"exchangeable","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"lastTradingBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxHoldingAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxLimited","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"rewardPool","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellFeeRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"setBotLimited","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"setBurnAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_burnLimit","type":"uint256"}],"name":"setBurnLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"setDutyFree","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"setExchangeable","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_buyFeeRate","type":"uint256"},{"internalType":"uint256","name":"_sellFeeRate","type":"uint256"}],"name":"setFeeRate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_limited","type":"bool"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"setMaxLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"setPool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"setRewardPool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_swapShare","type":"uint256"},{"internalType":"uint256","name":"_burnShare","type":"uint256"},{"internalType":"uint256","name":"_teamShare","type":"uint256"}],"name":"setShare","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_swapAmount","type":"uint256"}],"name":"setSwapAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"setTeam","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"setTransferable","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapShare","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":"team","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"teamShare","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFeeAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"transferable","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"uniswapPool","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"}],"name":"withdrawEth","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"address","name":"to","type":"address"}],"name":"withdrawToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60a06040523480156200001157600080fd5b5060405162005b6c38038062005b6c833981810160405281019062000037919062000b20565b6040518060400160405280600681526020017f446578426f7400000000000000000000000000000000000000000000000000008152506040518060400160405280600681526020017f444558424f540000000000000000000000000000000000000000000000000000815250620000c3620000b7620003c160201b60201c565b620003c960201b60201c565b8160049080519060200190620000db929190620009cb565b508060059080519060200190620000f4929190620009cb565b505050737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250506001600660016101000a81548160ff0219169083151502179055506000600660036101000a81548160ff0219169083151502179055506001600660046101000a81548160ff0219169083151502179055506000600660006101000a81548160ff021916908315150217905550612710601982620001bd919062000b96565b620001c9919062000c26565b600d81905550806012819055506702c68af0bb140000600e8190555067058d15e176280000600f8190555067058d15e176280000601081905550600a8162000212919062000c26565b60118190555066b1a2bc2ec50000600a8190555066b1a2bc2ec50000600b8190555081600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555033600660056101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555033600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001601660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001601660003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550620003b933826200048d60201b60201c565b505062000f27565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141562000500576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620004f79062000cbf565b60405180910390fd5b6200051460008383620005fc60201b60201c565b806003600082825462000528919062000ce1565b9250508190555080600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051620005dc919062000d4f565b60405180910390a3620005f8600083836200099d60201b60201c565b5050565b601560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015620006a15750601560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b620006e3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620006da9062000dbc565b60405180910390fd5b600660029054906101000a900460ff16620007c45762000708620009a260201b60201c565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614806200077c57506200074d620009a260201b60201c565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b620007be576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620007b59062000e2e565b60405180910390fd5b62000998565b600660039054906101000a900460ff1680156200082a5750601460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15620009975760125481601360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054620008bd919062000ce1565b111562000901576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620008f89062000ea0565b60405180910390fd5b80601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546200098f919062000ce1565b925050819055505b5b505050565b505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b828054620009d99062000ef1565b90600052602060002090601f016020900481019282620009fd576000855562000a49565b82601f1062000a1857805160ff191683800117855562000a49565b8280016001018555821562000a49579182015b8281111562000a4857825182559160200191906001019062000a2b565b5b50905062000a58919062000a5c565b5090565b5b8082111562000a7757600081600090555060010162000a5d565b5090565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000aad8262000a80565b9050919050565b62000abf8162000aa0565b811462000acb57600080fd5b50565b60008151905062000adf8162000ab4565b92915050565b6000819050919050565b62000afa8162000ae5565b811462000b0657600080fd5b50565b60008151905062000b1a8162000aef565b92915050565b6000806040838503121562000b3a5762000b3962000a7b565b5b600062000b4a8582860162000ace565b925050602062000b5d8582860162000b09565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062000ba38262000ae5565b915062000bb08362000ae5565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161562000bec5762000beb62000b67565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600062000c338262000ae5565b915062000c408362000ae5565b92508262000c535762000c5262000bf7565b5b828204905092915050565b600082825260208201905092915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600062000ca7601f8362000c5e565b915062000cb48262000c6f565b602082019050919050565b6000602082019050818103600083015262000cda8162000c98565b9050919050565b600062000cee8262000ae5565b915062000cfb8362000ae5565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111562000d335762000d3262000b67565b5b828201905092915050565b62000d498162000ae5565b82525050565b600060208201905062000d66600083018462000d3e565b92915050565b7f626c61636b6c6973746564000000000000000000000000000000000000000000600082015250565b600062000da4600b8362000c5e565b915062000db18262000d6c565b602082019050919050565b6000602082019050818103600083015262000dd78162000d95565b9050919050565b7f74726164696e67206973206e6f74207374617274656400000000000000000000600082015250565b600062000e1660168362000c5e565b915062000e238262000dde565b602082019050919050565b6000602082019050818103600083015262000e498162000e07565b9050919050565b7f627579206c696d69740000000000000000000000000000000000000000000000600082015250565b600062000e8860098362000c5e565b915062000e958262000e50565b602082019050919050565b6000602082019050818103600083015262000ebb8162000e79565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000f0a57607f821691505b6020821081141562000f215762000f2062000ec2565b5b50919050565b608051614c0d62000f5f60003960008181611109015281816134e4015281816135c6015281816135f6015261363e0152614c0d6000f3fe6080604052600436106103545760003560e01c806353556559116101c657806392ff0d31116100f7578063dd62ed3e11610095578063f2d2a7511161006f578063f2d2a75114610c38578063f2fde38b14610c61578063f9f92be414610c8a578063fa09b9fd14610cc75761035b565b8063dd62ed3e14610ba7578063e632313c14610be4578063ea6ef2fe14610c0d5761035b565b8063a0b0904e116100d1578063a0b0904e14610ab3578063a457c2d714610af0578063a9059cbb14610b2d578063be49e4a814610b6a5761035b565b806392ff0d3114610a3257806395d89b4114610a5d5780639652171614610a885761035b565b8063715018a61161016457806385f2aef21161013e57806385f2aef21461099a57806389f9a1d3146109c55780638af66e2b146109f05780638da5cb5b14610a075761035b565b8063715018a61461092f578063745d8dd41461094657806378238c37146109715761035b565b806366666aa9116101a057806366666aa9146108715780636b1b49871461089c57806370a08231146108c757806370d5ae05146109045761035b565b806353556559146107e05780635b149feb146108095780635e2623f3146108345761035b565b80632a9c72c8116102a057806341fa78671161023e5780634b0e7216116102185780634b0e72161461073a5780634ce982e4146107635780634e6fd6c41461078c57806351769d29146107b75761035b565b806341fa7867146106bd57806342966c68146106e85780634437152a146107115761035b565b8063313ce5671161027a578063313ce5671461061557806337d8b9951461064057806339509351146106575780633aeac4e1146106945761035b565b80632a9c72c8146105945780632bcc7e44146105bf5780632e8fa821146105ea5761035b565b80631694505e1161030d5780631b7e7e61116102e75780631b7e7e61146104da5780631fad3b391461050557806323b872dd1461052e57806325e160631461056b5761035b565b80631694505e1461045957806316fd96c21461048457806318160ddd146104af5761035b565b806301b8d0e11461035d57806305bf0a541461037457806306fdde031461039f578063095cf5c6146103ca578063095ea7b3146103f357806315c4e385146104305761035b565b3661035b57005b005b34801561036957600080fd5b50610372610d04565b005b34801561038057600080fd5b50610389610d38565b6040516103969190613704565b60405180910390f35b3480156103ab57600080fd5b506103b4610d3e565b6040516103c191906137b8565b60405180910390f35b3480156103d657600080fd5b506103f160048036038101906103ec919061384c565b610dd0565b005b3480156103ff57600080fd5b5061041a600480360381019061041591906138a5565b610f8c565b6040516104279190613900565b60405180910390f35b34801561043c57600080fd5b506104576004803603810190610452919061384c565b610faf565b005b34801561046557600080fd5b5061046e611107565b60405161047b919061397a565b60405180910390f35b34801561049057600080fd5b5061049961112b565b6040516104a69190613900565b60405180910390f35b3480156104bb57600080fd5b506104c461113e565b6040516104d19190613704565b60405180910390f35b3480156104e657600080fd5b506104ef611148565b6040516104fc91906139a4565b60405180910390f35b34801561051157600080fd5b5061052c600480360381019061052791906139bf565b61116e565b005b34801561053a57600080fd5b5061055560048036038101906105509190613a12565b61124e565b6040516105629190613900565b60405180910390f35b34801561057757600080fd5b50610592600480360381019061058d919061384c565b61127d565b005b3480156105a057600080fd5b506105a9611384565b6040516105b69190613704565b60405180910390f35b3480156105cb57600080fd5b506105d461138a565b6040516105e19190613900565b60405180910390f35b3480156105f657600080fd5b506105ff61139d565b60405161060c9190613704565b60405180910390f35b34801561062157600080fd5b5061062a6113a3565b6040516106379190613a81565b60405180910390f35b34801561064c57600080fd5b506106556113ac565b005b34801561066357600080fd5b5061067e600480360381019061067991906138a5565b6113e0565b60405161068b9190613900565b60405180910390f35b3480156106a057600080fd5b506106bb60048036038101906106b69190613a9c565b611417565b005b3480156106c957600080fd5b506106d2611591565b6040516106df9190613704565b60405180910390f35b3480156106f457600080fd5b5061070f600480360381019061070a9190613adc565b611597565b005b34801561071d57600080fd5b506107386004803603810190610733919061384c565b6115a4565b005b34801561074657600080fd5b50610761600480360381019061075c919061384c565b6116fc565b005b34801561076f57600080fd5b5061078a60048036038101906107859190613b35565b6117c4565b005b34801561079857600080fd5b506107a1611849565b6040516107ae91906139a4565b60405180910390f35b3480156107c357600080fd5b506107de60048036038101906107d99190613adc565b61184f565b005b3480156107ec57600080fd5b5061080760048036038101906108029190613adc565b6118af565b005b34801561081557600080fd5b5061081e611a69565b60405161082b9190613704565b60405180910390f35b34801561084057600080fd5b5061085b6004803603810190610856919061384c565b611a6f565b6040516108689190613704565b60405180910390f35b34801561087d57600080fd5b50610886611a87565b60405161089391906139a4565b60405180910390f35b3480156108a857600080fd5b506108b1611aad565b6040516108be9190613704565b60405180910390f35b3480156108d357600080fd5b506108ee60048036038101906108e9919061384c565b611ab3565b6040516108fb9190613704565b60405180910390f35b34801561091057600080fd5b50610919611afc565b60405161092691906139a4565b60405180910390f35b34801561093b57600080fd5b50610944611b22565b005b34801561095257600080fd5b5061095b611b36565b6040516109689190613900565b60405180910390f35b34801561097d57600080fd5b506109986004803603810190610993919061384c565b611b49565b005b3480156109a657600080fd5b506109af611c11565b6040516109bc91906139a4565b60405180910390f35b3480156109d157600080fd5b506109da611c37565b6040516109e79190613704565b60405180910390f35b3480156109fc57600080fd5b50610a05611c3d565b005b348015610a1357600080fd5b50610a1c611c71565b604051610a2991906139a4565b60405180910390f35b348015610a3e57600080fd5b50610a47611c9a565b604051610a549190613900565b60405180910390f35b348015610a6957600080fd5b50610a72611cad565b604051610a7f91906137b8565b60405180910390f35b348015610a9457600080fd5b50610a9d611d3f565b604051610aaa9190613704565b60405180910390f35b348015610abf57600080fd5b50610ada6004803603810190610ad5919061384c565b611d45565b604051610ae79190613900565b60405180910390f35b348015610afc57600080fd5b50610b176004803603810190610b1291906138a5565b611d65565b604051610b249190613900565b60405180910390f35b348015610b3957600080fd5b50610b546004803603810190610b4f91906138a5565b611ddc565b604051610b619190613900565b60405180910390f35b348015610b7657600080fd5b50610b916004803603810190610b8c9190613a9c565b611dff565b604051610b9e9190613704565b60405180910390f35b348015610bb357600080fd5b50610bce6004803603810190610bc99190613a9c565b611e24565b604051610bdb9190613704565b60405180910390f35b348015610bf057600080fd5b50610c0b6004803603810190610c069190613adc565b611eab565b005b348015610c1957600080fd5b50610c22611f01565b604051610c2f9190613704565b60405180910390f35b348015610c4457600080fd5b50610c5f6004803603810190610c5a9190613b75565b611f07565b005b348015610c6d57600080fd5b50610c886004803603810190610c83919061384c565b611f66565b005b348015610c9657600080fd5b50610cb16004803603810190610cac919061384c565b611fea565b604051610cbe9190613900565b60405180910390f35b348015610cd357600080fd5b50610cee6004803603810190610ce9919061384c565b61200a565b604051610cfb9190613900565b60405180910390f35b610d0c61202a565b600660019054906101000a900460ff1615600660016101000a81548160ff021916908315150217905550565b600f5481565b606060048054610d4d90613be4565b80601f0160208091040260200160405190810160405280929190818152602001828054610d7990613be4565b8015610dc65780601f10610d9b57610100808354040283529160200191610dc6565b820191906000526020600020905b815481529060010190602001808311610da957829003601f168201915b5050505050905090565b610dd861202a565b600060166000600660059054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080600660056101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160166000600660059054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600660059054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f3a24054aecb6c629e440be09672d66ad4e19dd2c07781e0559c20c14f9c234f260405160405180910390a350565b600080610f976120a8565b9050610fa48185856120b0565b600191505092915050565b610fb761202a565b601660008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615601660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550601660008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615158173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f30757f9f6b8114acbbc655397099fb9a7aa705ec41498de7a514c1eda8a775bd60405160405180910390a450565b7f000000000000000000000000000000000000000000000000000000000000000081565b600660049054906101000a900460ff1681565b6000600354905090565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61117661202a565b60008183856111859190613c45565b61118f9190613c45565b9050670de0b6b3a764000081146111db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111d290613ce7565b60405180910390fd5b83600e8190555082600f81905550816010819055503373ffffffffffffffffffffffffffffffffffffffff167fb64ad544af27e99cd377543f9bf7c46c4fa9824b57b97e2a7b2ee3536027670c600e54600f5460105460405161124093929190613d07565b60405180910390a250505050565b6000806112596120a8565b905061126685828561227b565b611271858585612307565b60019150509392505050565b61128561202a565b60008173ffffffffffffffffffffffffffffffffffffffff1647600067ffffffffffffffff8111156112ba576112b9613d3e565b5b6040519080825280601f01601f1916602001820160405280156112ec5781602001600182028036833780820191505090505b506040516112fa9190613db4565b60006040518083038185875af1925050503d8060008114611337576040519150601f19603f3d011682016040523d82523d6000602084013e61133c565b606091505b5050905080611380576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161137790613e17565b60405180910390fd5b5050565b60115481565b600660039054906101000a900460ff1681565b600d5481565b60006012905090565b6113b461202a565b600660029054906101000a900460ff1615600660026101000a81548160ff021916908315150217905550565b6000806113eb6120a8565b905061140c8185856113fd8589611e24565b6114079190613c45565b6120b0565b600191505092915050565b61141f61202a565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561148f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161148690613ea9565b60405180910390fd5b60008273ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016114ca91906139a4565b602060405180830381865afa1580156114e7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061150b9190613ede565b90508273ffffffffffffffffffffffffffffffffffffffff1663a9059cbb83836040518363ffffffff1660e01b8152600401611548929190613f0b565b6020604051808303816000875af1158015611567573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061158b9190613f49565b50505050565b600e5481565b6115a13382612742565b50565b6115ac61202a565b601460008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615601460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550601460008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615158173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f2563c168fd69ef80f00260284837ea144310fa81558e4265a735e74e6c32706460405160405180910390a450565b61170461202a565b80600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f2953a6d9d6a3e093c80024a8968a6b6e34f2df0af3d9b4dc14fee15d6928196d60405160405180910390a350565b6117cc61202a565b81600660036101000a81548160ff02191690831515021790555080601281905550601254600660039054906101000a900460ff1615153373ffffffffffffffffffffffffffffffffffffffff167fb042f18f8295fa0c50600f909ec7ee9f46ac93c8f9dc7c8a41287de94a4426fa60405160405180910390a45050565b61dead81565b61185761202a565b806011819055503373ffffffffffffffffffffffffffffffffffffffff167f38d9c6f41f695bf19dcf7405f3cff5dfffc286f7afda91032819c5ba5628d06b826040516118a49190613704565b60405180910390a250565b600660019054906101000a900460ff166118fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118f590613fc2565b60405180910390fd5b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd3361dead846040518463ffffffff1660e01b815260040161195f93929190613fe2565b6020604051808303816000875af115801561197e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119a29190613f49565b503073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b81526004016119de929190613f0b565b6020604051808303816000875af11580156119fd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a219190613f49565b50803373ffffffffffffffffffffffffffffffffffffffff167f6ea412b125ed242bc34c304877264761547306c2429c03d7fd1b477aa61a3f5d60405160405180910390a350565b600b5481565b60176020528060005260406000206000915090505481565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600a5481565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611b2a61202a565b611b346000612912565b565b600660019054906101000a900460ff1681565b611b5161202a565b80600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fe50b2a0036b45c7b809db33748f38b59556cf2c03c5dcb2921260e81958b692e60405160405180910390a350565b600660059054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60125481565b611c4561202a565b600660049054906101000a900460ff1615600660046101000a81548160ff021916908315150217905550565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600660029054906101000a900460ff1681565b606060058054611cbc90613be4565b80601f0160208091040260200160405190810160405280929190818152602001828054611ce890613be4565b8015611d355780601f10611d0a57610100808354040283529160200191611d35565b820191906000526020600020905b815481529060010190602001808311611d1857829003601f168201915b5050505050905090565b600c5481565b60166020528060005260406000206000915054906101000a900460ff1681565b600080611d706120a8565b90506000611d7e8286611e24565b905083811015611dc3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dba9061408b565b60405180910390fd5b611dd082868684036120b0565b60019250505092915050565b600080611de76120a8565b9050611df4818585612307565b600191505092915050565b6013602052816000526040600020602052806000526040600020600091509150505481565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b611eb361202a565b80600d81905550803373ffffffffffffffffffffffffffffffffffffffff167f784b3429538db33e97d92bcbc511240c0eb8051a85923fd5d00e67a0ff14d72560405160405180910390a350565b60105481565b611f0f61202a565b81600a8190555080600b8190555080823373ffffffffffffffffffffffffffffffffffffffff167f7ad4ef4cd81b13de60e52aa49a4efc6a1bc6e8bb1849d7e7bce2d790b024f07360405160405180910390a45050565b611f6e61202a565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611fde576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fd59061411d565b60405180910390fd5b611fe781612912565b50565b60156020528060005260406000206000915054906101000a900460ff1681565b60146020528060005260406000206000915054906101000a900460ff1681565b6120326120a8565b73ffffffffffffffffffffffffffffffffffffffff16612050611c71565b73ffffffffffffffffffffffffffffffffffffffff16146120a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161209d90614189565b60405180910390fd5b565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612120576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121179061421b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612190576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612187906142ad565b60405180910390fd5b80600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161226e9190613704565b60405180910390a3505050565b60006122878484611e24565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811461230157818110156122f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122ea90614319565b60405180910390fd5b61230084848484036120b0565b5b50505050565b600660009054906101000a900460ff1615801561236e5750601460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156123b2576001600660006101000a81548160ff0219169083151502179055506123966129d6565b6000600660006101000a81548160ff0219169083151502179055505b6000601460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561253e57600660049054906101000a900460ff16156124e25743601760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054141561249d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161249490614385565b60405180910390fd5b43601760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661253957600a5490505b6126c5565b601460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156126c457600660049054906101000a900460ff161561266c5743601760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541415612627576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161261e90614385565b60405180910390fd5b43601760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b601660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166126c357600b5490505b5b5b6000811180156126d55750600082115b15612731576000670de0b6b3a764000082846126f191906143a5565b6126fb919061442e565b905080600c600082825461270f9190613c45565b92505081905550612721853083612e47565b808361272d919061445f565b9250505b61273c848484612e47565b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156127b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127a990614505565b60405180910390fd5b6127be826000836130c2565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612845576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161283c90614597565b60405180910390fd5b818103600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600360008282540392505081905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516128f99190613704565b60405180910390a361290d83600084613440565b505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600d54600c54116129e657612e45565b600080670de0b6b3a7640000600f54600c54612a0291906143a5565b612a0c919061442e565b90506000670de0b6b3a7640000601054600c54612a2991906143a5565b612a33919061442e565b90506000670de0b6b3a7640000600e54600c54612a5091906143a5565b612a5a919061442e565b90506000600283612a6b919061442e565b905060008183612a7b9190613c45565b90506000479050612a8b82613445565b600060028247612a9b919061445f565b612aa5919061442e565b9050600660059054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681600067ffffffffffffffff811115612afc57612afb613d3e565b5b6040519080825280601f01601f191660200182016040528015612b2e5781602001600182028036833780820191505090505b50604051612b3c9190613db4565b60006040518083038185875af1925050503d8060008114612b79576040519150601f19603f3d011682016040523d82523d6000602084013e612b7e565b606091505b50508098505087612bc4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bbb90613e17565b60405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681600067ffffffffffffffff811115612c1957612c18613d3e565b5b6040519080825280601f01601f191660200182016040528015612c4b5781602001600182028036833780820191505090505b50604051612c599190613db4565b60006040518083038185875af1925050503d8060008114612c96576040519150601f19603f3d011682016040523d82523d6000602084013e612c9b565b606091505b50508098505087612ce1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cd890613e17565b60405180910390fd5b601154612cec61113e565b10612d93573073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16896040518363ffffffff1660e01b8152600401612d4e929190613f0b565b6020604051808303816000875af1158015612d6d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d919190613f49565b505b3073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb600660059054906101000a900473ffffffffffffffffffffffffffffffffffffffff16866040518363ffffffff1660e01b8152600401612df0929190613f0b565b6020604051808303816000875af1158015612e0f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e339190613f49565b506000600c8190555050505050505050505b565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612eb7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612eae90614629565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612f27576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f1e906146bb565b60405180910390fd5b612f328383836130c2565b6000600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612fb9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fb09061474d565b60405180910390fd5b818103600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516130a99190613704565b60405180910390a36130bc848484613440565b50505050565b601560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156131665750601560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b6131a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161319c906147b9565b60405180910390fd5b600660029054906101000a900460ff16613270576131c1611c71565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16148061322c57506131fd611c71565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b61326b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161326290614825565b60405180910390fd5b61343b565b600660039054906101000a900460ff1680156132d55750601460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561343a5760125481601360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546133659190613c45565b11156133a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161339d90614891565b60405180910390fd5b80601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546134329190613c45565b925050819055505b5b505050565b505050565b6000600267ffffffffffffffff81111561346257613461613d3e565b5b6040519080825280602002602001820160405280156134905781602001602082028036833780820191505090505b50905030816000815181106134a8576134a76148b1565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561354d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061357191906148f5565b81600181518110613585576135846148b1565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050816135ea307f0000000000000000000000000000000000000000000000000000000000000000611e24565b101561363c5761363b307f00000000000000000000000000000000000000000000000000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6120b0565b5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166318cbafe58360008430426040518663ffffffff1660e01b815260040161369e959493929190614a1b565b6000604051808303816000875af11580156136bd573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f820116820180604052508101906136e69190614b8e565b505050565b6000819050919050565b6136fe816136eb565b82525050565b600060208201905061371960008301846136f5565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561375957808201518184015260208101905061373e565b83811115613768576000848401525b50505050565b6000601f19601f8301169050919050565b600061378a8261371f565b613794818561372a565b93506137a481856020860161373b565b6137ad8161376e565b840191505092915050565b600060208201905081810360008301526137d2818461377f565b905092915050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613819826137ee565b9050919050565b6138298161380e565b811461383457600080fd5b50565b60008135905061384681613820565b92915050565b600060208284031215613862576138616137e4565b5b600061387084828501613837565b91505092915050565b613882816136eb565b811461388d57600080fd5b50565b60008135905061389f81613879565b92915050565b600080604083850312156138bc576138bb6137e4565b5b60006138ca85828601613837565b92505060206138db85828601613890565b9150509250929050565b60008115159050919050565b6138fa816138e5565b82525050565b600060208201905061391560008301846138f1565b92915050565b6000819050919050565b600061394061393b613936846137ee565b61391b565b6137ee565b9050919050565b600061395282613925565b9050919050565b600061396482613947565b9050919050565b61397481613959565b82525050565b600060208201905061398f600083018461396b565b92915050565b61399e8161380e565b82525050565b60006020820190506139b96000830184613995565b92915050565b6000806000606084860312156139d8576139d76137e4565b5b60006139e686828701613890565b93505060206139f786828701613890565b9250506040613a0886828701613890565b9150509250925092565b600080600060608486031215613a2b57613a2a6137e4565b5b6000613a3986828701613837565b9350506020613a4a86828701613837565b9250506040613a5b86828701613890565b9150509250925092565b600060ff82169050919050565b613a7b81613a65565b82525050565b6000602082019050613a966000830184613a72565b92915050565b60008060408385031215613ab357613ab26137e4565b5b6000613ac185828601613837565b9250506020613ad285828601613837565b9150509250929050565b600060208284031215613af257613af16137e4565b5b6000613b0084828501613890565b91505092915050565b613b12816138e5565b8114613b1d57600080fd5b50565b600081359050613b2f81613b09565b92915050565b60008060408385031215613b4c57613b4b6137e4565b5b6000613b5a85828601613b20565b9250506020613b6b85828601613890565b9150509250929050565b60008060408385031215613b8c57613b8b6137e4565b5b6000613b9a85828601613890565b9250506020613bab85828601613890565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680613bfc57607f821691505b60208210811415613c1057613c0f613bb5565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613c50826136eb565b9150613c5b836136eb565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613c9057613c8f613c16565b5b828201905092915050565b7f666f726269640000000000000000000000000000000000000000000000000000600082015250565b6000613cd160068361372a565b9150613cdc82613c9b565b602082019050919050565b60006020820190508181036000830152613d0081613cc4565b9050919050565b6000606082019050613d1c60008301866136f5565b613d2960208301856136f5565b613d3660408301846136f5565b949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600081519050919050565b600081905092915050565b6000613d8e82613d6d565b613d988185613d78565b9350613da881856020860161373b565b80840191505092915050565b6000613dc08284613d83565b915081905092915050565b7f657468207472616e73666572206661696c656400000000000000000000000000600082015250565b6000613e0160138361372a565b9150613e0c82613dcb565b602082019050919050565b60006020820190508181036000830152613e3081613df4565b9050919050565b7f746f6b656e20616464726573732063616e6e6f74206265207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000613e9360248361372a565b9150613e9e82613e37565b604082019050919050565b60006020820190508181036000830152613ec281613e86565b9050919050565b600081519050613ed881613879565b92915050565b600060208284031215613ef457613ef36137e4565b5b6000613f0284828501613ec9565b91505092915050565b6000604082019050613f206000830185613995565b613f2d60208301846136f5565b9392505050565b600081519050613f4381613b09565b92915050565b600060208284031215613f5f57613f5e6137e4565b5b6000613f6d84828501613f34565b91505092915050565b7f6e6f6e2065786368616e676561626c6500000000000000000000000000000000600082015250565b6000613fac60108361372a565b9150613fb782613f76565b602082019050919050565b60006020820190508181036000830152613fdb81613f9f565b9050919050565b6000606082019050613ff76000830186613995565b6140046020830185613995565b61401160408301846136f5565b949350505050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b600061407560258361372a565b915061408082614019565b604082019050919050565b600060208201905081810360008301526140a481614068565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061410760268361372a565b9150614112826140ab565b604082019050919050565b60006020820190508181036000830152614136816140fa565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061417360208361372a565b915061417e8261413d565b602082019050919050565b600060208201905081810360008301526141a281614166565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600061420560248361372a565b9150614210826141a9565b604082019050919050565b60006020820190508181036000830152614234816141f8565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b600061429760228361372a565b91506142a28261423b565b604082019050919050565b600060208201905081810360008301526142c68161428a565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b6000614303601d8361372a565b915061430e826142cd565b602082019050919050565b60006020820190508181036000830152614332816142f6565b9050919050565b7f626f74206c696d69740000000000000000000000000000000000000000000000600082015250565b600061436f60098361372a565b915061437a82614339565b602082019050919050565b6000602082019050818103600083015261439e81614362565b9050919050565b60006143b0826136eb565b91506143bb836136eb565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156143f4576143f3613c16565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000614439826136eb565b9150614444836136eb565b925082614454576144536143ff565b5b828204905092915050565b600061446a826136eb565b9150614475836136eb565b92508282101561448857614487613c16565b5b828203905092915050565b7f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b60006144ef60218361372a565b91506144fa82614493565b604082019050919050565b6000602082019050818103600083015261451e816144e2565b9050919050565b7f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60008201527f6365000000000000000000000000000000000000000000000000000000000000602082015250565b600061458160228361372a565b915061458c82614525565b604082019050919050565b600060208201905081810360008301526145b081614574565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b600061461360258361372a565b915061461e826145b7565b604082019050919050565b6000602082019050818103600083015261464281614606565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006146a560238361372a565b91506146b082614649565b604082019050919050565b600060208201905081810360008301526146d481614698565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b600061473760268361372a565b9150614742826146db565b604082019050919050565b600060208201905081810360008301526147668161472a565b9050919050565b7f626c61636b6c6973746564000000000000000000000000000000000000000000600082015250565b60006147a3600b8361372a565b91506147ae8261476d565b602082019050919050565b600060208201905081810360008301526147d281614796565b9050919050565b7f74726164696e67206973206e6f74207374617274656400000000000000000000600082015250565b600061480f60168361372a565b915061481a826147d9565b602082019050919050565b6000602082019050818103600083015261483e81614802565b9050919050565b7f627579206c696d69740000000000000000000000000000000000000000000000600082015250565b600061487b60098361372a565b915061488682614845565b602082019050919050565b600060208201905081810360008301526148aa8161486e565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000815190506148ef81613820565b92915050565b60006020828403121561490b5761490a6137e4565b5b6000614919848285016148e0565b91505092915050565b6000819050919050565b600061494761494261493d84614922565b61391b565b6136eb565b9050919050565b6149578161492c565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6149928161380e565b82525050565b60006149a48383614989565b60208301905092915050565b6000602082019050919050565b60006149c88261495d565b6149d28185614968565b93506149dd83614979565b8060005b83811015614a0e5781516149f58882614998565b9750614a00836149b0565b9250506001810190506149e1565b5085935050505092915050565b600060a082019050614a3060008301886136f5565b614a3d602083018761494e565b8181036040830152614a4f81866149bd565b9050614a5e6060830185613995565b614a6b60808301846136f5565b9695505050505050565b600080fd5b614a838261376e565b810181811067ffffffffffffffff82111715614aa257614aa1613d3e565b5b80604052505050565b6000614ab56137da565b9050614ac18282614a7a565b919050565b600067ffffffffffffffff821115614ae157614ae0613d3e565b5b602082029050602081019050919050565b600080fd5b6000614b0a614b0584614ac6565b614aab565b90508083825260208201905060208402830185811115614b2d57614b2c614af2565b5b835b81811015614b565780614b428882613ec9565b845260208401935050602081019050614b2f565b5050509392505050565b600082601f830112614b7557614b74614a75565b5b8151614b85848260208601614af7565b91505092915050565b600060208284031215614ba457614ba36137e4565b5b600082015167ffffffffffffffff811115614bc257614bc16137e9565b5b614bce84828501614b60565b9150509291505056fea264697066735822122076d30da429200f0b0f83ba64bfebe9fa1328f0fa83dea64990d613556b82d2c564736f6c634300080c0033000000000000000000000000dfddf431a6cda1955e288597f85b0b2ec21e1aad000000000000000000000000000000000000000000422ca8b0a00a4250000000

Deployed Bytecode

0x6080604052600436106103545760003560e01c806353556559116101c657806392ff0d31116100f7578063dd62ed3e11610095578063f2d2a7511161006f578063f2d2a75114610c38578063f2fde38b14610c61578063f9f92be414610c8a578063fa09b9fd14610cc75761035b565b8063dd62ed3e14610ba7578063e632313c14610be4578063ea6ef2fe14610c0d5761035b565b8063a0b0904e116100d1578063a0b0904e14610ab3578063a457c2d714610af0578063a9059cbb14610b2d578063be49e4a814610b6a5761035b565b806392ff0d3114610a3257806395d89b4114610a5d5780639652171614610a885761035b565b8063715018a61161016457806385f2aef21161013e57806385f2aef21461099a57806389f9a1d3146109c55780638af66e2b146109f05780638da5cb5b14610a075761035b565b8063715018a61461092f578063745d8dd41461094657806378238c37146109715761035b565b806366666aa9116101a057806366666aa9146108715780636b1b49871461089c57806370a08231146108c757806370d5ae05146109045761035b565b806353556559146107e05780635b149feb146108095780635e2623f3146108345761035b565b80632a9c72c8116102a057806341fa78671161023e5780634b0e7216116102185780634b0e72161461073a5780634ce982e4146107635780634e6fd6c41461078c57806351769d29146107b75761035b565b806341fa7867146106bd57806342966c68146106e85780634437152a146107115761035b565b8063313ce5671161027a578063313ce5671461061557806337d8b9951461064057806339509351146106575780633aeac4e1146106945761035b565b80632a9c72c8146105945780632bcc7e44146105bf5780632e8fa821146105ea5761035b565b80631694505e1161030d5780631b7e7e61116102e75780631b7e7e61146104da5780631fad3b391461050557806323b872dd1461052e57806325e160631461056b5761035b565b80631694505e1461045957806316fd96c21461048457806318160ddd146104af5761035b565b806301b8d0e11461035d57806305bf0a541461037457806306fdde031461039f578063095cf5c6146103ca578063095ea7b3146103f357806315c4e385146104305761035b565b3661035b57005b005b34801561036957600080fd5b50610372610d04565b005b34801561038057600080fd5b50610389610d38565b6040516103969190613704565b60405180910390f35b3480156103ab57600080fd5b506103b4610d3e565b6040516103c191906137b8565b60405180910390f35b3480156103d657600080fd5b506103f160048036038101906103ec919061384c565b610dd0565b005b3480156103ff57600080fd5b5061041a600480360381019061041591906138a5565b610f8c565b6040516104279190613900565b60405180910390f35b34801561043c57600080fd5b506104576004803603810190610452919061384c565b610faf565b005b34801561046557600080fd5b5061046e611107565b60405161047b919061397a565b60405180910390f35b34801561049057600080fd5b5061049961112b565b6040516104a69190613900565b60405180910390f35b3480156104bb57600080fd5b506104c461113e565b6040516104d19190613704565b60405180910390f35b3480156104e657600080fd5b506104ef611148565b6040516104fc91906139a4565b60405180910390f35b34801561051157600080fd5b5061052c600480360381019061052791906139bf565b61116e565b005b34801561053a57600080fd5b5061055560048036038101906105509190613a12565b61124e565b6040516105629190613900565b60405180910390f35b34801561057757600080fd5b50610592600480360381019061058d919061384c565b61127d565b005b3480156105a057600080fd5b506105a9611384565b6040516105b69190613704565b60405180910390f35b3480156105cb57600080fd5b506105d461138a565b6040516105e19190613900565b60405180910390f35b3480156105f657600080fd5b506105ff61139d565b60405161060c9190613704565b60405180910390f35b34801561062157600080fd5b5061062a6113a3565b6040516106379190613a81565b60405180910390f35b34801561064c57600080fd5b506106556113ac565b005b34801561066357600080fd5b5061067e600480360381019061067991906138a5565b6113e0565b60405161068b9190613900565b60405180910390f35b3480156106a057600080fd5b506106bb60048036038101906106b69190613a9c565b611417565b005b3480156106c957600080fd5b506106d2611591565b6040516106df9190613704565b60405180910390f35b3480156106f457600080fd5b5061070f600480360381019061070a9190613adc565b611597565b005b34801561071d57600080fd5b506107386004803603810190610733919061384c565b6115a4565b005b34801561074657600080fd5b50610761600480360381019061075c919061384c565b6116fc565b005b34801561076f57600080fd5b5061078a60048036038101906107859190613b35565b6117c4565b005b34801561079857600080fd5b506107a1611849565b6040516107ae91906139a4565b60405180910390f35b3480156107c357600080fd5b506107de60048036038101906107d99190613adc565b61184f565b005b3480156107ec57600080fd5b5061080760048036038101906108029190613adc565b6118af565b005b34801561081557600080fd5b5061081e611a69565b60405161082b9190613704565b60405180910390f35b34801561084057600080fd5b5061085b6004803603810190610856919061384c565b611a6f565b6040516108689190613704565b60405180910390f35b34801561087d57600080fd5b50610886611a87565b60405161089391906139a4565b60405180910390f35b3480156108a857600080fd5b506108b1611aad565b6040516108be9190613704565b60405180910390f35b3480156108d357600080fd5b506108ee60048036038101906108e9919061384c565b611ab3565b6040516108fb9190613704565b60405180910390f35b34801561091057600080fd5b50610919611afc565b60405161092691906139a4565b60405180910390f35b34801561093b57600080fd5b50610944611b22565b005b34801561095257600080fd5b5061095b611b36565b6040516109689190613900565b60405180910390f35b34801561097d57600080fd5b506109986004803603810190610993919061384c565b611b49565b005b3480156109a657600080fd5b506109af611c11565b6040516109bc91906139a4565b60405180910390f35b3480156109d157600080fd5b506109da611c37565b6040516109e79190613704565b60405180910390f35b3480156109fc57600080fd5b50610a05611c3d565b005b348015610a1357600080fd5b50610a1c611c71565b604051610a2991906139a4565b60405180910390f35b348015610a3e57600080fd5b50610a47611c9a565b604051610a549190613900565b60405180910390f35b348015610a6957600080fd5b50610a72611cad565b604051610a7f91906137b8565b60405180910390f35b348015610a9457600080fd5b50610a9d611d3f565b604051610aaa9190613704565b60405180910390f35b348015610abf57600080fd5b50610ada6004803603810190610ad5919061384c565b611d45565b604051610ae79190613900565b60405180910390f35b348015610afc57600080fd5b50610b176004803603810190610b1291906138a5565b611d65565b604051610b249190613900565b60405180910390f35b348015610b3957600080fd5b50610b546004803603810190610b4f91906138a5565b611ddc565b604051610b619190613900565b60405180910390f35b348015610b7657600080fd5b50610b916004803603810190610b8c9190613a9c565b611dff565b604051610b9e9190613704565b60405180910390f35b348015610bb357600080fd5b50610bce6004803603810190610bc99190613a9c565b611e24565b604051610bdb9190613704565b60405180910390f35b348015610bf057600080fd5b50610c0b6004803603810190610c069190613adc565b611eab565b005b348015610c1957600080fd5b50610c22611f01565b604051610c2f9190613704565b60405180910390f35b348015610c4457600080fd5b50610c5f6004803603810190610c5a9190613b75565b611f07565b005b348015610c6d57600080fd5b50610c886004803603810190610c83919061384c565b611f66565b005b348015610c9657600080fd5b50610cb16004803603810190610cac919061384c565b611fea565b604051610cbe9190613900565b60405180910390f35b348015610cd357600080fd5b50610cee6004803603810190610ce9919061384c565b61200a565b604051610cfb9190613900565b60405180910390f35b610d0c61202a565b600660019054906101000a900460ff1615600660016101000a81548160ff021916908315150217905550565b600f5481565b606060048054610d4d90613be4565b80601f0160208091040260200160405190810160405280929190818152602001828054610d7990613be4565b8015610dc65780601f10610d9b57610100808354040283529160200191610dc6565b820191906000526020600020905b815481529060010190602001808311610da957829003601f168201915b5050505050905090565b610dd861202a565b600060166000600660059054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555080600660056101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600160166000600660059054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600660059054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f3a24054aecb6c629e440be09672d66ad4e19dd2c07781e0559c20c14f9c234f260405160405180910390a350565b600080610f976120a8565b9050610fa48185856120b0565b600191505092915050565b610fb761202a565b601660008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615601660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550601660008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615158173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f30757f9f6b8114acbbc655397099fb9a7aa705ec41498de7a514c1eda8a775bd60405160405180910390a450565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b600660049054906101000a900460ff1681565b6000600354905090565b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61117661202a565b60008183856111859190613c45565b61118f9190613c45565b9050670de0b6b3a764000081146111db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111d290613ce7565b60405180910390fd5b83600e8190555082600f81905550816010819055503373ffffffffffffffffffffffffffffffffffffffff167fb64ad544af27e99cd377543f9bf7c46c4fa9824b57b97e2a7b2ee3536027670c600e54600f5460105460405161124093929190613d07565b60405180910390a250505050565b6000806112596120a8565b905061126685828561227b565b611271858585612307565b60019150509392505050565b61128561202a565b60008173ffffffffffffffffffffffffffffffffffffffff1647600067ffffffffffffffff8111156112ba576112b9613d3e565b5b6040519080825280601f01601f1916602001820160405280156112ec5781602001600182028036833780820191505090505b506040516112fa9190613db4565b60006040518083038185875af1925050503d8060008114611337576040519150601f19603f3d011682016040523d82523d6000602084013e61133c565b606091505b5050905080611380576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161137790613e17565b60405180910390fd5b5050565b60115481565b600660039054906101000a900460ff1681565b600d5481565b60006012905090565b6113b461202a565b600660029054906101000a900460ff1615600660026101000a81548160ff021916908315150217905550565b6000806113eb6120a8565b905061140c8185856113fd8589611e24565b6114079190613c45565b6120b0565b600191505092915050565b61141f61202a565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561148f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161148690613ea9565b60405180910390fd5b60008273ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016114ca91906139a4565b602060405180830381865afa1580156114e7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061150b9190613ede565b90508273ffffffffffffffffffffffffffffffffffffffff1663a9059cbb83836040518363ffffffff1660e01b8152600401611548929190613f0b565b6020604051808303816000875af1158015611567573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061158b9190613f49565b50505050565b600e5481565b6115a13382612742565b50565b6115ac61202a565b601460008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615601460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550601460008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615158173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f2563c168fd69ef80f00260284837ea144310fa81558e4265a735e74e6c32706460405160405180910390a450565b61170461202a565b80600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f2953a6d9d6a3e093c80024a8968a6b6e34f2df0af3d9b4dc14fee15d6928196d60405160405180910390a350565b6117cc61202a565b81600660036101000a81548160ff02191690831515021790555080601281905550601254600660039054906101000a900460ff1615153373ffffffffffffffffffffffffffffffffffffffff167fb042f18f8295fa0c50600f909ec7ee9f46ac93c8f9dc7c8a41287de94a4426fa60405160405180910390a45050565b61dead81565b61185761202a565b806011819055503373ffffffffffffffffffffffffffffffffffffffff167f38d9c6f41f695bf19dcf7405f3cff5dfffc286f7afda91032819c5ba5628d06b826040516118a49190613704565b60405180910390a250565b600660019054906101000a900460ff166118fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118f590613fc2565b60405180910390fd5b600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd3361dead846040518463ffffffff1660e01b815260040161195f93929190613fe2565b6020604051808303816000875af115801561197e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119a29190613f49565b503073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b81526004016119de929190613f0b565b6020604051808303816000875af11580156119fd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a219190613f49565b50803373ffffffffffffffffffffffffffffffffffffffff167f6ea412b125ed242bc34c304877264761547306c2429c03d7fd1b477aa61a3f5d60405160405180910390a350565b600b5481565b60176020528060005260406000206000915090505481565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600a5481565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611b2a61202a565b611b346000612912565b565b600660019054906101000a900460ff1681565b611b5161202a565b80600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fe50b2a0036b45c7b809db33748f38b59556cf2c03c5dcb2921260e81958b692e60405160405180910390a350565b600660059054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60125481565b611c4561202a565b600660049054906101000a900460ff1615600660046101000a81548160ff021916908315150217905550565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600660029054906101000a900460ff1681565b606060058054611cbc90613be4565b80601f0160208091040260200160405190810160405280929190818152602001828054611ce890613be4565b8015611d355780601f10611d0a57610100808354040283529160200191611d35565b820191906000526020600020905b815481529060010190602001808311611d1857829003601f168201915b5050505050905090565b600c5481565b60166020528060005260406000206000915054906101000a900460ff1681565b600080611d706120a8565b90506000611d7e8286611e24565b905083811015611dc3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dba9061408b565b60405180910390fd5b611dd082868684036120b0565b60019250505092915050565b600080611de76120a8565b9050611df4818585612307565b600191505092915050565b6013602052816000526040600020602052806000526040600020600091509150505481565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b611eb361202a565b80600d81905550803373ffffffffffffffffffffffffffffffffffffffff167f784b3429538db33e97d92bcbc511240c0eb8051a85923fd5d00e67a0ff14d72560405160405180910390a350565b60105481565b611f0f61202a565b81600a8190555080600b8190555080823373ffffffffffffffffffffffffffffffffffffffff167f7ad4ef4cd81b13de60e52aa49a4efc6a1bc6e8bb1849d7e7bce2d790b024f07360405160405180910390a45050565b611f6e61202a565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611fde576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fd59061411d565b60405180910390fd5b611fe781612912565b50565b60156020528060005260406000206000915054906101000a900460ff1681565b60146020528060005260406000206000915054906101000a900460ff1681565b6120326120a8565b73ffffffffffffffffffffffffffffffffffffffff16612050611c71565b73ffffffffffffffffffffffffffffffffffffffff16146120a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161209d90614189565b60405180910390fd5b565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612120576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121179061421b565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612190576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612187906142ad565b60405180910390fd5b80600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161226e9190613704565b60405180910390a3505050565b60006122878484611e24565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811461230157818110156122f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122ea90614319565b60405180910390fd5b61230084848484036120b0565b5b50505050565b600660009054906101000a900460ff1615801561236e5750601460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156123b2576001600660006101000a81548160ff0219169083151502179055506123966129d6565b6000600660006101000a81548160ff0219169083151502179055505b6000601460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561253e57600660049054906101000a900460ff16156124e25743601760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054141561249d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161249490614385565b60405180910390fd5b43601760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b601660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1661253957600a5490505b6126c5565b601460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156126c457600660049054906101000a900460ff161561266c5743601760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020541415612627576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161261e90614385565b60405180910390fd5b43601760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b601660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166126c357600b5490505b5b5b6000811180156126d55750600082115b15612731576000670de0b6b3a764000082846126f191906143a5565b6126fb919061442e565b905080600c600082825461270f9190613c45565b92505081905550612721853083612e47565b808361272d919061445f565b9250505b61273c848484612e47565b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156127b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127a990614505565b60405180910390fd5b6127be826000836130c2565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612845576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161283c90614597565b60405180910390fd5b818103600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600360008282540392505081905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516128f99190613704565b60405180910390a361290d83600084613440565b505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600d54600c54116129e657612e45565b600080670de0b6b3a7640000600f54600c54612a0291906143a5565b612a0c919061442e565b90506000670de0b6b3a7640000601054600c54612a2991906143a5565b612a33919061442e565b90506000670de0b6b3a7640000600e54600c54612a5091906143a5565b612a5a919061442e565b90506000600283612a6b919061442e565b905060008183612a7b9190613c45565b90506000479050612a8b82613445565b600060028247612a9b919061445f565b612aa5919061442e565b9050600660059054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681600067ffffffffffffffff811115612afc57612afb613d3e565b5b6040519080825280601f01601f191660200182016040528015612b2e5781602001600182028036833780820191505090505b50604051612b3c9190613db4565b60006040518083038185875af1925050503d8060008114612b79576040519150601f19603f3d011682016040523d82523d6000602084013e612b7e565b606091505b50508098505087612bc4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bbb90613e17565b60405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681600067ffffffffffffffff811115612c1957612c18613d3e565b5b6040519080825280601f01601f191660200182016040528015612c4b5781602001600182028036833780820191505090505b50604051612c599190613db4565b60006040518083038185875af1925050503d8060008114612c96576040519150601f19603f3d011682016040523d82523d6000602084013e612c9b565b606091505b50508098505087612ce1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612cd890613e17565b60405180910390fd5b601154612cec61113e565b10612d93573073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16896040518363ffffffff1660e01b8152600401612d4e929190613f0b565b6020604051808303816000875af1158015612d6d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d919190613f49565b505b3073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb600660059054906101000a900473ffffffffffffffffffffffffffffffffffffffff16866040518363ffffffff1660e01b8152600401612df0929190613f0b565b6020604051808303816000875af1158015612e0f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e339190613f49565b506000600c8190555050505050505050505b565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612eb7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612eae90614629565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612f27576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f1e906146bb565b60405180910390fd5b612f328383836130c2565b6000600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612fb9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fb09061474d565b60405180910390fd5b818103600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516130a99190613704565b60405180910390a36130bc848484613440565b50505050565b601560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156131665750601560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b6131a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161319c906147b9565b60405180910390fd5b600660029054906101000a900460ff16613270576131c1611c71565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16148061322c57506131fd611c71565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b61326b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161326290614825565b60405180910390fd5b61343b565b600660039054906101000a900460ff1680156132d55750601460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561343a5760125481601360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546133659190613c45565b11156133a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161339d90614891565b60405180910390fd5b80601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546134329190613c45565b925050819055505b5b505050565b505050565b6000600267ffffffffffffffff81111561346257613461613d3e565b5b6040519080825280602002602001820160405280156134905781602001602082028036833780820191505090505b50905030816000815181106134a8576134a76148b1565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561354d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061357191906148f5565b81600181518110613585576135846148b1565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050816135ea307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d611e24565b101561363c5761363b307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6120b0565b5b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff166318cbafe58360008430426040518663ffffffff1660e01b815260040161369e959493929190614a1b565b6000604051808303816000875af11580156136bd573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f820116820180604052508101906136e69190614b8e565b505050565b6000819050919050565b6136fe816136eb565b82525050565b600060208201905061371960008301846136f5565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561375957808201518184015260208101905061373e565b83811115613768576000848401525b50505050565b6000601f19601f8301169050919050565b600061378a8261371f565b613794818561372a565b93506137a481856020860161373b565b6137ad8161376e565b840191505092915050565b600060208201905081810360008301526137d2818461377f565b905092915050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000613819826137ee565b9050919050565b6138298161380e565b811461383457600080fd5b50565b60008135905061384681613820565b92915050565b600060208284031215613862576138616137e4565b5b600061387084828501613837565b91505092915050565b613882816136eb565b811461388d57600080fd5b50565b60008135905061389f81613879565b92915050565b600080604083850312156138bc576138bb6137e4565b5b60006138ca85828601613837565b92505060206138db85828601613890565b9150509250929050565b60008115159050919050565b6138fa816138e5565b82525050565b600060208201905061391560008301846138f1565b92915050565b6000819050919050565b600061394061393b613936846137ee565b61391b565b6137ee565b9050919050565b600061395282613925565b9050919050565b600061396482613947565b9050919050565b61397481613959565b82525050565b600060208201905061398f600083018461396b565b92915050565b61399e8161380e565b82525050565b60006020820190506139b96000830184613995565b92915050565b6000806000606084860312156139d8576139d76137e4565b5b60006139e686828701613890565b93505060206139f786828701613890565b9250506040613a0886828701613890565b9150509250925092565b600080600060608486031215613a2b57613a2a6137e4565b5b6000613a3986828701613837565b9350506020613a4a86828701613837565b9250506040613a5b86828701613890565b9150509250925092565b600060ff82169050919050565b613a7b81613a65565b82525050565b6000602082019050613a966000830184613a72565b92915050565b60008060408385031215613ab357613ab26137e4565b5b6000613ac185828601613837565b9250506020613ad285828601613837565b9150509250929050565b600060208284031215613af257613af16137e4565b5b6000613b0084828501613890565b91505092915050565b613b12816138e5565b8114613b1d57600080fd5b50565b600081359050613b2f81613b09565b92915050565b60008060408385031215613b4c57613b4b6137e4565b5b6000613b5a85828601613b20565b9250506020613b6b85828601613890565b9150509250929050565b60008060408385031215613b8c57613b8b6137e4565b5b6000613b9a85828601613890565b9250506020613bab85828601613890565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680613bfc57607f821691505b60208210811415613c1057613c0f613bb5565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613c50826136eb565b9150613c5b836136eb565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613c9057613c8f613c16565b5b828201905092915050565b7f666f726269640000000000000000000000000000000000000000000000000000600082015250565b6000613cd160068361372a565b9150613cdc82613c9b565b602082019050919050565b60006020820190508181036000830152613d0081613cc4565b9050919050565b6000606082019050613d1c60008301866136f5565b613d2960208301856136f5565b613d3660408301846136f5565b949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600081519050919050565b600081905092915050565b6000613d8e82613d6d565b613d988185613d78565b9350613da881856020860161373b565b80840191505092915050565b6000613dc08284613d83565b915081905092915050565b7f657468207472616e73666572206661696c656400000000000000000000000000600082015250565b6000613e0160138361372a565b9150613e0c82613dcb565b602082019050919050565b60006020820190508181036000830152613e3081613df4565b9050919050565b7f746f6b656e20616464726573732063616e6e6f74206265207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000613e9360248361372a565b9150613e9e82613e37565b604082019050919050565b60006020820190508181036000830152613ec281613e86565b9050919050565b600081519050613ed881613879565b92915050565b600060208284031215613ef457613ef36137e4565b5b6000613f0284828501613ec9565b91505092915050565b6000604082019050613f206000830185613995565b613f2d60208301846136f5565b9392505050565b600081519050613f4381613b09565b92915050565b600060208284031215613f5f57613f5e6137e4565b5b6000613f6d84828501613f34565b91505092915050565b7f6e6f6e2065786368616e676561626c6500000000000000000000000000000000600082015250565b6000613fac60108361372a565b9150613fb782613f76565b602082019050919050565b60006020820190508181036000830152613fdb81613f9f565b9050919050565b6000606082019050613ff76000830186613995565b6140046020830185613995565b61401160408301846136f5565b949350505050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b600061407560258361372a565b915061408082614019565b604082019050919050565b600060208201905081810360008301526140a481614068565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061410760268361372a565b9150614112826140ab565b604082019050919050565b60006020820190508181036000830152614136816140fa565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061417360208361372a565b915061417e8261413d565b602082019050919050565b600060208201905081810360008301526141a281614166565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600061420560248361372a565b9150614210826141a9565b604082019050919050565b60006020820190508181036000830152614234816141f8565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b600061429760228361372a565b91506142a28261423b565b604082019050919050565b600060208201905081810360008301526142c68161428a565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b6000614303601d8361372a565b915061430e826142cd565b602082019050919050565b60006020820190508181036000830152614332816142f6565b9050919050565b7f626f74206c696d69740000000000000000000000000000000000000000000000600082015250565b600061436f60098361372a565b915061437a82614339565b602082019050919050565b6000602082019050818103600083015261439e81614362565b9050919050565b60006143b0826136eb565b91506143bb836136eb565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156143f4576143f3613c16565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000614439826136eb565b9150614444836136eb565b925082614454576144536143ff565b5b828204905092915050565b600061446a826136eb565b9150614475836136eb565b92508282101561448857614487613c16565b5b828203905092915050565b7f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b60006144ef60218361372a565b91506144fa82614493565b604082019050919050565b6000602082019050818103600083015261451e816144e2565b9050919050565b7f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60008201527f6365000000000000000000000000000000000000000000000000000000000000602082015250565b600061458160228361372a565b915061458c82614525565b604082019050919050565b600060208201905081810360008301526145b081614574565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b600061461360258361372a565b915061461e826145b7565b604082019050919050565b6000602082019050818103600083015261464281614606565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006146a560238361372a565b91506146b082614649565b604082019050919050565b600060208201905081810360008301526146d481614698565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b600061473760268361372a565b9150614742826146db565b604082019050919050565b600060208201905081810360008301526147668161472a565b9050919050565b7f626c61636b6c6973746564000000000000000000000000000000000000000000600082015250565b60006147a3600b8361372a565b91506147ae8261476d565b602082019050919050565b600060208201905081810360008301526147d281614796565b9050919050565b7f74726164696e67206973206e6f74207374617274656400000000000000000000600082015250565b600061480f60168361372a565b915061481a826147d9565b602082019050919050565b6000602082019050818103600083015261483e81614802565b9050919050565b7f627579206c696d69740000000000000000000000000000000000000000000000600082015250565b600061487b60098361372a565b915061488682614845565b602082019050919050565b600060208201905081810360008301526148aa8161486e565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000815190506148ef81613820565b92915050565b60006020828403121561490b5761490a6137e4565b5b6000614919848285016148e0565b91505092915050565b6000819050919050565b600061494761494261493d84614922565b61391b565b6136eb565b9050919050565b6149578161492c565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6149928161380e565b82525050565b60006149a48383614989565b60208301905092915050565b6000602082019050919050565b60006149c88261495d565b6149d28185614968565b93506149dd83614979565b8060005b83811015614a0e5781516149f58882614998565b9750614a00836149b0565b9250506001810190506149e1565b5085935050505092915050565b600060a082019050614a3060008301886136f5565b614a3d602083018761494e565b8181036040830152614a4f81866149bd565b9050614a5e6060830185613995565b614a6b60808301846136f5565b9695505050505050565b600080fd5b614a838261376e565b810181811067ffffffffffffffff82111715614aa257614aa1613d3e565b5b80604052505050565b6000614ab56137da565b9050614ac18282614a7a565b919050565b600067ffffffffffffffff821115614ae157614ae0613d3e565b5b602082029050602081019050919050565b600080fd5b6000614b0a614b0584614ac6565b614aab565b90508083825260208201905060208402830185811115614b2d57614b2c614af2565b5b835b81811015614b565780614b428882613ec9565b845260208401935050602081019050614b2f565b5050509392505050565b600082601f830112614b7557614b74614a75565b5b8151614b85848260208601614af7565b91505092915050565b600060208284031215614ba457614ba36137e4565b5b600082015167ffffffffffffffff811115614bc257614bc16137e9565b5b614bce84828501614b60565b9150509291505056fea264697066735822122076d30da429200f0b0f83ba64bfebe9fa1328f0fa83dea64990d613556b82d2c564736f6c634300080c0033

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

000000000000000000000000dfddf431a6cda1955e288597f85b0b2ec21e1aad000000000000000000000000000000000000000000422ca8b0a00a4250000000

-----Decoded View---------------
Arg [0] : _token (address): 0xdFDdF431a6cdA1955E288597f85B0b2Ec21e1AaD
Arg [1] : _totalSupply (uint256): 80000000000000000000000000

-----Encoded View---------------
2 Constructor Arguments found :
Arg [0] : 000000000000000000000000dfddf431a6cda1955e288597f85b0b2ec21e1aad
Arg [1] : 000000000000000000000000000000000000000000422ca8b0a00a4250000000


Deployed Bytecode Sourcemap

21820:9551:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25104:93;;;;;;;;;;;;;:::i;:::-;;22437:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;5964:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26290:196;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;8324:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26816:179;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21953:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22124:22;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7093:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22244:22;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27568:388;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;9105:261;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25583:191;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22499:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22095:22;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22374:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6935:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25205;;;;;;;;;;;;;:::i;:::-;;9775:238;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25306:269;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22406:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31287:81;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26100:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26653:155;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25782:215;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21863:81;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27238:154;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24810:286;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22305:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22794:52;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22179:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22273;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7264:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22211:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1523:103;;;;;;;;;;;;;:::i;:::-;;22033:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26494:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22153:19;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22530:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26005:87;;;;;;;;;;;;;:::i;:::-;;882;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22064:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6183:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22338:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22746:41;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10516:436;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7597:193;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22568:71;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7853:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27400:160;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22468:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27003:227;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1781:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22697:42;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22646:44;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25104:93;768:13;:11;:13::i;:::-;25177:12:::1;;;;;;;;;;;25176:13;25161:12;;:28;;;;;;;;;;;;;;;;;;25104:93::o:0;22437:24::-;;;;:::o;5964:100::-;6018:13;6051:5;6044:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5964:100;:::o;26290:196::-;768:13;:11;:13::i;:::-;26371:5:::1;26354:8;:14;26363:4;;;;;;;;;;;26354:14;;;;;;;;;;;;;;;;:22;;;;;;;;;;;;;;;;;;26396:7;26389:4;;:14;;;;;;;;;;;;;;;;;;26431:4;26414:8;:14;26423:4;;;;;;;;;;;26414:14;;;;;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;26473:4;;;;;;;;;;;26453:25;;26461:10;26453:25;;;;;;;;;;;;26290:196:::0;:::o;8324:201::-;8407:4;8424:13;8440:12;:10;:12::i;:::-;8424:28;;8463:32;8472:5;8479:7;8488:6;8463:8;:32::i;:::-;8513:4;8506:11;;;8324:201;;;;:::o;26816:179::-;768:13;:11;:13::i;:::-;26903:8:::1;:17;26912:7;26903:17;;;;;;;;;;;;;;;;;;;;;;;;;26902:18;26882:8;:17;26891:7;26882:17;;;;;;;;;;;;;;;;:38;;;;;;;;;;;;;;;;;;26969:8;:17;26978:7;26969:17;;;;;;;;;;;;;;;;;;;;;;;;;26936:51;;26960:7;26936:51;;26948:10;26936:51;;;;;;;;;;;;26816:179:::0;:::o;21953:51::-;;;:::o;22124:22::-;;;;;;;;;;;;;:::o;7093:108::-;7154:7;7181:12;;7174:19;;7093:108;:::o;22244:22::-;;;;;;;;;;;;;:::o;27568:388::-;768:13;:11;:13::i;:::-;27676:18:::1;27719:10;27708;27697;:21;;;;:::i;:::-;:32;;;;:::i;:::-;27676:53;;27762:7;27748:10;:21;27740:40;;;;;;;;;;;;:::i;:::-;;;;;;;;;27803:10;27791:9;:22;;;;27836:10;27824:9;:22;;;;27869:10;27857:9;:22;;;;27904:10;27895:53;;;27916:9;;27927;;27938;;27895:53;;;;;;;;:::i;:::-;;;;;;;;27665:291;27568:388:::0;;;:::o;9105:261::-;9202:4;9219:15;9237:12;:10;:12::i;:::-;9219:30;;9260:38;9276:4;9282:7;9291:6;9260:15;:38::i;:::-;9309:27;9319:4;9325:2;9329:6;9309:9;:27::i;:::-;9354:4;9347:11;;;9105:261;;;;;:::o;25583:191::-;768:13;:11;:13::i;:::-;25647:12:::1;25665:2;:7;;25680:21;25713:1;25703:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25665:51;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25646:70;;;25735:7;25727:39;;;;;;;;;;;;:::i;:::-;;;;;;;;;25635:139;25583:191:::0;:::o;22499:24::-;;;;:::o;22095:22::-;;;;;;;;;;;;;:::o;22374:25::-;;;;:::o;6935:93::-;6993:5;7018:2;7011:9;;6935:93;:::o;25205:::-;768:13;:11;:13::i;:::-;25278:12:::1;;;;;;;;;;;25277:13;25262:12;;:28;;;;;;;;;;;;;;;;;;25205:93::o:0;9775:238::-;9863:4;9880:13;9896:12;:10;:12::i;:::-;9880:28;;9919:64;9928:5;9935:7;9972:10;9944:25;9954:5;9961:7;9944:9;:25::i;:::-;:38;;;;:::i;:::-;9919:8;:64::i;:::-;10001:4;9994:11;;;9775:238;;;;:::o;25306:269::-;768:13;:11;:13::i;:::-;25411:1:::1;25394:19;;:5;:19;;;;25386:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;25465:15;25490:5;25483:23;;;25515:4;25483:38;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;25465:56;;25539:5;25532:22;;;25555:2;25559:7;25532:35;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;25375:200;25306:269:::0;;:::o;22406:24::-;;;;:::o;31287:81::-;31336:24;31342:10;31354:5;31336;:24::i;:::-;31287:81;:::o;26100:182::-;768:13;:11;:13::i;:::-;26188:11:::1;:20;26200:7;26188:20;;;;;;;;;;;;;;;;;;;;;;;;;26187:21;26164:11;:20;26176:7;26164:20;;;;;;;;;;;;;;;;:44;;;;;;;;;;;;;;;;;;26253:11;:20;26265:7;26253:20;;;;;;;;;;;;;;;;;;;;;;;;;26224:50;;26244:7;26224:50;;26232:10;26224:50;;;;;;;;;;;;26100:182:::0;:::o;26653:155::-;768:13;:11;:13::i;:::-;26738:7:::1;26724:11;;:21;;;;;;;;;;;;;;;;;;26788:11;;;;;;;;;;;26761:39;;26776:10;26761:39;;;;;;;;;;;;26653:155:::0;:::o;25782:215::-;768:13;:11;:13::i;:::-;25878:8:::1;25865:10;;:21;;;;;;;;;;;;;;;;;;25916:7;25897:16;:26;;;;25972:16;;25960:10;;;;;;;;;;;25939:50;;25948:10;25939:50;;;;;;;;;;;;25782:215:::0;;:::o;21863:81::-;21902:42;21863:81;:::o;27238:154::-;768:13;:11;:13::i;:::-;27322:10:::1;27310:9;:22;;;;27361:10;27348:36;;;27373:10;27348:36;;;;;;:::i;:::-;;;;;;;;27238:154:::0;:::o;24810:286::-;24872:12;;;;;;;;;;;24864:41;;;;;;;;;;;;:::i;:::-;;;;;;;;;24925:7;;;;;;;;;;;24918:28;;;24947:10;21902:42;24973:6;24918:62;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;25006:4;24991:30;;;25022:10;25034:6;24991:50;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;25081:6;25069:10;25059:29;;;;;;;;;;;;24810:286;:::o;22305:26::-;;;;:::o;22794:52::-;;;;;;;;;;;;;;;;;:::o;22179:25::-;;;;;;;;;;;;;:::o;22273:::-;;;;:::o;7264:127::-;7338:7;7365:9;:18;7375:7;7365:18;;;;;;;;;;;;;;;;7358:25;;7264:127;;;:::o;22211:26::-;;;;;;;;;;;;;:::o;1523:103::-;768:13;:11;:13::i;:::-;1588:30:::1;1615:1;1588:18;:30::i;:::-;1523:103::o:0;22033:24::-;;;;;;;;;;;;;:::o;26494:151::-;768:13;:11;:13::i;:::-;26577:7:::1;26564:10;;:20;;;;;;;;;;;;;;;;;;26626:10;;;;;;;;;;;26600:37;;26614:10;26600:37;;;;;;;;;;;;26494:151:::0;:::o;22153:19::-;;;;;;;;;;;;;:::o;22530:31::-;;;;:::o;26005:87::-;768:13;:11;:13::i;:::-;26074:10:::1;;;;;;;;;;;26073:11;26060:10;;:24;;;;;;;;;;;;;;;;;;26005:87::o:0;882:::-;928:7;955:6;;;;;;;;;;;948:13;;882:87;:::o;22064:24::-;;;;;;;;;;;;;:::o;6183:104::-;6239:13;6272:7;6265:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6183:104;:::o;22338:29::-;;;;:::o;22746:41::-;;;;;;;;;;;;;;;;;;;;;;:::o;10516:436::-;10609:4;10626:13;10642:12;:10;:12::i;:::-;10626:28;;10665:24;10692:25;10702:5;10709:7;10692:9;:25::i;:::-;10665:52;;10756:15;10736:16;:35;;10728:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;10849:60;10858:5;10865:7;10893:15;10874:16;:34;10849:8;:60::i;:::-;10940:4;10933:11;;;;10516:436;;;;:::o;7597:193::-;7676:4;7693:13;7709:12;:10;:12::i;:::-;7693:28;;7732;7742:5;7749:2;7753:6;7732:9;:28::i;:::-;7778:4;7771:11;;;7597:193;;;;:::o;22568:71::-;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;7853:151::-;7942:7;7969:11;:18;7981:5;7969:18;;;;;;;;;;;;;;;:27;7988:7;7969:27;;;;;;;;;;;;;;;;7962:34;;7853:151;;;;:::o;27400:160::-;768:13;:11;:13::i;:::-;27487:11:::1;27474:10;:24;;;;27540:11;27528:10;27514:38;;;;;;;;;;;;27400:160:::0;:::o;22468:24::-;;;;:::o;27003:227::-;768:13;:11;:13::i;:::-;27109:11:::1;27096:10;:24;;;;27145:12;27131:11;:26;;;;27209:12;27196:11;27184:10;27173:49;;;;;;;;;;;;27003:227:::0;;:::o;1781:201::-;768:13;:11;:13::i;:::-;1890:1:::1;1870:22;;:8;:22;;;;1862:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;1946:28;1965:8;1946:18;:28::i;:::-;1781:201:::0;:::o;22697:42::-;;;;;;;;;;;;;;;;;;;;;;:::o;22646:44::-;;;;;;;;;;;;;;;;;;;;;;:::o;1047:132::-;1122:12;:10;:12::i;:::-;1111:23;;:7;:5;:7::i;:::-;:23;;;1103:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1047:132::o;98:98::-;151:7;178:10;171:17;;98:98;:::o;14509:346::-;14628:1;14611:19;;:5;:19;;;;14603:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;14709:1;14690:21;;:7;:21;;;;14682:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;14793:6;14763:11;:18;14775:5;14763:18;;;;;;;;;;;;;;;:27;14782:7;14763:27;;;;;;;;;;;;;;;:36;;;;14831:7;14815:32;;14824:5;14815:32;;;14840:6;14815:32;;;;;;:::i;:::-;;;;;;;;14509:346;;;:::o;15146:419::-;15247:24;15274:25;15284:5;15291:7;15274:9;:25::i;:::-;15247:52;;15334:17;15314:16;:37;15310:248;;15396:6;15376:16;:26;;15368:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;15480:51;15489:5;15496:7;15524:6;15505:16;:25;15480:8;:51::i;:::-;15310:248;15236:329;15146:419;;;:::o;28487:1172::-;28582:8;;;;;;;;;;;28581:9;:31;;;;;28595:11;:17;28607:4;28595:17;;;;;;;;;;;;;;;;;;;;;;;;;28594:18;28581:31;28577:136;;;28640:4;28629:8;;:15;;;;;;;;;;;;;;;;;;28659:11;:9;:11::i;:::-;28696:5;28685:8;;:16;;;;;;;;;;;;;;;;;;28577:136;28725:15;28759:11;:17;28771:4;28759:17;;;;;;;;;;;;;;;;;;;;;;;;;28755:615;;;28797:10;;;;;;;;;;;28793:163;;;28860:12;28836:16;:20;28853:2;28836:20;;;;;;;;;;;;;;;;:36;;28828:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;28928:12;28905:16;:20;28922:2;28905:20;;;;;;;;;;;;;;;:35;;;;28793:163;28977:8;:12;28986:2;28977:12;;;;;;;;;;;;;;;;;;;;;;;;;28972:74;;29020:10;;29010:20;;28972:74;28755:615;;;29067:11;:15;29079:2;29067:15;;;;;;;;;;;;;;;;;;;;;;;;;29063:307;;;29103:10;;;;;;;;;;;29099:167;;;29168:12;29142:16;:22;29159:4;29142:22;;;;;;;;;;;;;;;;:38;;29134:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;29238:12;29213:16;:22;29230:4;29213:22;;;;;;;;;;;;;;;:37;;;;29099:167;29287:8;:14;29296:4;29287:14;;;;;;;;;;;;;;;;;;;;;;;;;29282:77;;29332:11;;29322:21;;29282:77;29063:307;28755:615;29396:1;29386:7;:11;:25;;;;;29410:1;29401:6;:10;29386:25;29382:218;;;29428:11;29461:7;29451;29442:6;:16;;;;:::i;:::-;:26;;;;:::i;:::-;29428:40;;29501:3;29483:14;;:21;;;;;;;:::i;:::-;;;;;;;;29519:41;29535:4;29549;29556:3;29519:15;:41::i;:::-;29585:3;29575:13;;;;;:::i;:::-;;;29413:187;29382:218;29618:33;29634:4;29640:2;29644:6;29618:15;:33::i;:::-;28566:1093;28487:1172;;;:::o;13396:675::-;13499:1;13480:21;;:7;:21;;;;13472:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;13552:49;13573:7;13590:1;13594:6;13552:20;:49::i;:::-;13614:22;13639:9;:18;13649:7;13639:18;;;;;;;;;;;;;;;;13614:43;;13694:6;13676:14;:24;;13668:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;13813:6;13796:14;:23;13775:9;:18;13785:7;13775:18;;;;;;;;;;;;;;;:44;;;;13930:6;13914:12;;:22;;;;;;;;;;;13991:1;13965:37;;13974:7;13965:37;;;13995:6;13965:37;;;;;;:::i;:::-;;;;;;;;14015:48;14035:7;14052:1;14056:6;14015:19;:48::i;:::-;13461:610;13396:675;;:::o;2142:191::-;2216:16;2235:6;;;;;;;;;;;2216:25;;2261:8;2252:6;;:17;;;;;;;;;;;;;;;;;;2316:8;2285:40;;2306:8;2285:40;;;;;;;;;;;;2205:128;2142:191;:::o;29667:1145::-;29730:10;;29712:14;;:28;29708:67;;29757:7;;29708:67;29787:12;29812:20;29864:7;29852:9;;29835:14;;:26;;;;:::i;:::-;:36;;;;:::i;:::-;29812:59;;29882:20;29934:7;29922:9;;29905:14;;:26;;;;:::i;:::-;:36;;;;:::i;:::-;29882:59;;29952:21;30005:7;29993:9;;29976:14;;:26;;;;:::i;:::-;:36;;;;:::i;:::-;29952:60;;30025:24;30067:1;30052:12;:16;;;;:::i;:::-;30025:43;;30081:20;30120:16;30104:13;:32;;;;:::i;:::-;30081:55;;30149:25;30177:21;30149:49;;30211:31;30229:12;30211:17;:31::i;:::-;30255:22;30326:1;30305:17;30281:21;:41;;;;:::i;:::-;30280:47;;;;:::i;:::-;30255:72;;30354:4;;;;;;;;;;;:9;;30371:14;30397:1;30387:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30354:46;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30340:60;;;;;30419:7;30411:39;;;;;;;;;;;;:::i;:::-;;;;;;;;;30477:10;;;;;;;;;;;:15;;30500:14;30526:1;30516:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30477:52;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30463:66;;;;;30548:7;30540:39;;;;;;;;;;;;:::i;:::-;;;;;;;;;30613:9;;30596:13;:11;:13::i;:::-;:26;30592:115;;30653:4;30638:30;;;30669:11;;;;;;;;;;;30682:12;30638:57;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;30592:115;30734:4;30719:30;;;30750:4;;;;;;;;;;;30756:16;30719:54;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;30803:1;30786:14;:18;;;;29697:1115;;;;;;;;29667:1145;:::o;11422:806::-;11535:1;11519:18;;:4;:18;;;;11511:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;11612:1;11598:16;;:2;:16;;;;11590:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;11667:38;11688:4;11694:2;11698:6;11667:20;:38::i;:::-;11718:19;11740:9;:15;11750:4;11740:15;;;;;;;;;;;;;;;;11718:37;;11789:6;11774:11;:21;;11766:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;11906:6;11892:11;:20;11874:9;:15;11884:4;11874:15;;;;;;;;;;;;;;;:38;;;;12109:6;12092:9;:13;12102:2;12092:13;;;;;;;;;;;;;;;;:23;;;;;;;;;;;12159:2;12144:26;;12153:4;12144:26;;;12163:6;12144:26;;;;;;:::i;:::-;;;;;;;;12183:37;12203:4;12209:2;12213:6;12183:19;:37::i;:::-;11500:728;11422:806;;;:::o;27964:515::-;28074:9;:13;28084:2;28074:13;;;;;;;;;;;;;;;;;;;;;;;;;28073:14;:34;;;;;28092:9;:15;28102:4;28092:15;;;;;;;;;;;;;;;;;;;;;;;;;28091:16;28073:34;28065:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;28141:12;;;;;;;;;;;28136:134;;28186:7;:5;:7::i;:::-;28178:15;;:4;:15;;;:32;;;;28203:7;:5;:7::i;:::-;28197:13;;:2;:13;;;28178:32;28170:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;28252:7;;28136:134;28286:10;;;;;;;;;;;:31;;;;;28300:11;:17;28312:4;28300:17;;;;;;;;;;;;;;;;;;;;;;;;;28286:31;28282:190;;;28380:16;;28370:6;28342:15;:19;28358:2;28342:19;;;;;;;;;;;;;;;:25;28362:4;28342:25;;;;;;;;;;;;;;;;:34;;;;:::i;:::-;:54;;28334:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;28454:6;28425:15;:19;28441:2;28425:19;;;;;;;;;;;;;;;:25;28445:4;28425:25;;;;;;;;;;;;;;;;:35;;;;;;;:::i;:::-;;;;;;;;28282:190;27964:515;;;;:::o;16860:90::-;;;;:::o;30820:459::-;30883:21;30921:1;30907:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30883:40;;30952:4;30934;30939:1;30934:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;30978:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;30968:4;30973:1;30968:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;31070:6;31017:50;31035:4;31050:15;31017:9;:50::i;:::-;:59;31013:160;;;31093:68;31110:4;31125:15;31143:17;31093:8;:68::i;:::-;31013:160;31185:15;:37;;;31223:6;31231:1;31234:4;31248;31255:15;31185:86;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;30872:407;30820:459;:::o;7:77:1:-;44:7;73:5;62:16;;7:77;;;:::o;90:118::-;177:24;195:5;177:24;:::i;:::-;172:3;165:37;90:118;;:::o;214:222::-;307:4;345:2;334:9;330:18;322:26;;358:71;426:1;415:9;411:17;402:6;358:71;:::i;:::-;214:222;;;;:::o;442:99::-;494:6;528:5;522:12;512:22;;442:99;;;:::o;547:169::-;631:11;665:6;660:3;653:19;705:4;700:3;696:14;681:29;;547:169;;;;:::o;722:307::-;790:1;800:113;814:6;811:1;808:13;800:113;;;899:1;894:3;890:11;884:18;880:1;875:3;871:11;864:39;836:2;833:1;829:10;824:15;;800:113;;;931:6;928:1;925:13;922:101;;;1011:1;1002:6;997:3;993:16;986:27;922:101;771:258;722:307;;;:::o;1035:102::-;1076:6;1127:2;1123:7;1118:2;1111:5;1107:14;1103:28;1093:38;;1035:102;;;:::o;1143:364::-;1231:3;1259:39;1292:5;1259:39;:::i;:::-;1314:71;1378:6;1373:3;1314:71;:::i;:::-;1307:78;;1394:52;1439:6;1434:3;1427:4;1420:5;1416:16;1394:52;:::i;:::-;1471:29;1493:6;1471:29;:::i;:::-;1466:3;1462:39;1455:46;;1235:272;1143:364;;;;:::o;1513:313::-;1626:4;1664:2;1653:9;1649:18;1641:26;;1713:9;1707:4;1703:20;1699:1;1688:9;1684:17;1677:47;1741:78;1814:4;1805:6;1741:78;:::i;:::-;1733:86;;1513:313;;;;:::o;1832:75::-;1865:6;1898:2;1892:9;1882:19;;1832:75;:::o;1913:117::-;2022:1;2019;2012:12;2036:117;2145:1;2142;2135:12;2159:126;2196:7;2236:42;2229:5;2225:54;2214:65;;2159:126;;;:::o;2291:96::-;2328:7;2357:24;2375:5;2357:24;:::i;:::-;2346:35;;2291:96;;;:::o;2393:122::-;2466:24;2484:5;2466:24;:::i;:::-;2459:5;2456:35;2446:63;;2505:1;2502;2495:12;2446:63;2393:122;:::o;2521:139::-;2567:5;2605:6;2592:20;2583:29;;2621:33;2648:5;2621:33;:::i;:::-;2521:139;;;;:::o;2666:329::-;2725:6;2774:2;2762:9;2753:7;2749:23;2745:32;2742:119;;;2780:79;;:::i;:::-;2742:119;2900:1;2925:53;2970:7;2961:6;2950:9;2946:22;2925:53;:::i;:::-;2915:63;;2871:117;2666:329;;;;:::o;3001:122::-;3074:24;3092:5;3074:24;:::i;:::-;3067:5;3064:35;3054:63;;3113:1;3110;3103:12;3054:63;3001:122;:::o;3129:139::-;3175:5;3213:6;3200:20;3191:29;;3229:33;3256:5;3229:33;:::i;:::-;3129:139;;;;:::o;3274:474::-;3342:6;3350;3399:2;3387:9;3378:7;3374:23;3370:32;3367:119;;;3405:79;;:::i;:::-;3367:119;3525:1;3550:53;3595:7;3586:6;3575:9;3571:22;3550:53;:::i;:::-;3540:63;;3496:117;3652:2;3678:53;3723:7;3714:6;3703:9;3699:22;3678:53;:::i;:::-;3668:63;;3623:118;3274:474;;;;;:::o;3754:90::-;3788:7;3831:5;3824:13;3817:21;3806:32;;3754:90;;;:::o;3850:109::-;3931:21;3946:5;3931:21;:::i;:::-;3926:3;3919:34;3850:109;;:::o;3965:210::-;4052:4;4090:2;4079:9;4075:18;4067:26;;4103:65;4165:1;4154:9;4150:17;4141:6;4103:65;:::i;:::-;3965:210;;;;:::o;4181:60::-;4209:3;4230:5;4223:12;;4181:60;;;:::o;4247:142::-;4297:9;4330:53;4348:34;4357:24;4375:5;4357:24;:::i;:::-;4348:34;:::i;:::-;4330:53;:::i;:::-;4317:66;;4247:142;;;:::o;4395:126::-;4445:9;4478:37;4509:5;4478:37;:::i;:::-;4465:50;;4395:126;;;:::o;4527:153::-;4604:9;4637:37;4668:5;4637:37;:::i;:::-;4624:50;;4527:153;;;:::o;4686:185::-;4800:64;4858:5;4800:64;:::i;:::-;4795:3;4788:77;4686:185;;:::o;4877:276::-;4997:4;5035:2;5024:9;5020:18;5012:26;;5048:98;5143:1;5132:9;5128:17;5119:6;5048:98;:::i;:::-;4877:276;;;;:::o;5159:118::-;5246:24;5264:5;5246:24;:::i;:::-;5241:3;5234:37;5159:118;;:::o;5283:222::-;5376:4;5414:2;5403:9;5399:18;5391:26;;5427:71;5495:1;5484:9;5480:17;5471:6;5427:71;:::i;:::-;5283:222;;;;:::o;5511:619::-;5588:6;5596;5604;5653:2;5641:9;5632:7;5628:23;5624:32;5621:119;;;5659:79;;:::i;:::-;5621:119;5779:1;5804:53;5849:7;5840:6;5829:9;5825:22;5804:53;:::i;:::-;5794:63;;5750:117;5906:2;5932:53;5977:7;5968:6;5957:9;5953:22;5932:53;:::i;:::-;5922:63;;5877:118;6034:2;6060:53;6105:7;6096:6;6085:9;6081:22;6060:53;:::i;:::-;6050:63;;6005:118;5511:619;;;;;:::o;6136:::-;6213:6;6221;6229;6278:2;6266:9;6257:7;6253:23;6249:32;6246:119;;;6284:79;;:::i;:::-;6246:119;6404:1;6429:53;6474:7;6465:6;6454:9;6450:22;6429:53;:::i;:::-;6419:63;;6375:117;6531:2;6557:53;6602:7;6593:6;6582:9;6578:22;6557:53;:::i;:::-;6547:63;;6502:118;6659:2;6685:53;6730:7;6721:6;6710:9;6706:22;6685:53;:::i;:::-;6675:63;;6630:118;6136:619;;;;;:::o;6761:86::-;6796:7;6836:4;6829:5;6825:16;6814:27;;6761:86;;;:::o;6853:112::-;6936:22;6952:5;6936:22;:::i;:::-;6931:3;6924:35;6853:112;;:::o;6971:214::-;7060:4;7098:2;7087:9;7083:18;7075:26;;7111:67;7175:1;7164:9;7160:17;7151:6;7111:67;:::i;:::-;6971:214;;;;:::o;7191:474::-;7259:6;7267;7316:2;7304:9;7295:7;7291:23;7287:32;7284:119;;;7322:79;;:::i;:::-;7284:119;7442:1;7467:53;7512:7;7503:6;7492:9;7488:22;7467:53;:::i;:::-;7457:63;;7413:117;7569:2;7595:53;7640:7;7631:6;7620:9;7616:22;7595:53;:::i;:::-;7585:63;;7540:118;7191:474;;;;;:::o;7671:329::-;7730:6;7779:2;7767:9;7758:7;7754:23;7750:32;7747:119;;;7785:79;;:::i;:::-;7747:119;7905:1;7930:53;7975:7;7966:6;7955:9;7951:22;7930:53;:::i;:::-;7920:63;;7876:117;7671:329;;;;:::o;8006:116::-;8076:21;8091:5;8076:21;:::i;:::-;8069:5;8066:32;8056:60;;8112:1;8109;8102:12;8056:60;8006:116;:::o;8128:133::-;8171:5;8209:6;8196:20;8187:29;;8225:30;8249:5;8225:30;:::i;:::-;8128:133;;;;:::o;8267:468::-;8332:6;8340;8389:2;8377:9;8368:7;8364:23;8360:32;8357:119;;;8395:79;;:::i;:::-;8357:119;8515:1;8540:50;8582:7;8573:6;8562:9;8558:22;8540:50;:::i;:::-;8530:60;;8486:114;8639:2;8665:53;8710:7;8701:6;8690:9;8686:22;8665:53;:::i;:::-;8655:63;;8610:118;8267:468;;;;;:::o;8741:474::-;8809:6;8817;8866:2;8854:9;8845:7;8841:23;8837:32;8834:119;;;8872:79;;:::i;:::-;8834:119;8992:1;9017:53;9062:7;9053:6;9042:9;9038:22;9017:53;:::i;:::-;9007:63;;8963:117;9119:2;9145:53;9190:7;9181:6;9170:9;9166:22;9145:53;:::i;:::-;9135:63;;9090:118;8741:474;;;;;:::o;9221:180::-;9269:77;9266:1;9259:88;9366:4;9363:1;9356:15;9390:4;9387:1;9380:15;9407:320;9451:6;9488:1;9482:4;9478:12;9468:22;;9535:1;9529:4;9525:12;9556:18;9546:81;;9612:4;9604:6;9600:17;9590:27;;9546:81;9674:2;9666:6;9663:14;9643:18;9640:38;9637:84;;;9693:18;;:::i;:::-;9637:84;9458:269;9407:320;;;:::o;9733:180::-;9781:77;9778:1;9771:88;9878:4;9875:1;9868:15;9902:4;9899:1;9892:15;9919:305;9959:3;9978:20;9996:1;9978:20;:::i;:::-;9973:25;;10012:20;10030:1;10012:20;:::i;:::-;10007:25;;10166:1;10098:66;10094:74;10091:1;10088:81;10085:107;;;10172:18;;:::i;:::-;10085:107;10216:1;10213;10209:9;10202:16;;9919:305;;;;:::o;10230:156::-;10370:8;10366:1;10358:6;10354:14;10347:32;10230:156;:::o;10392:365::-;10534:3;10555:66;10619:1;10614:3;10555:66;:::i;:::-;10548:73;;10630:93;10719:3;10630:93;:::i;:::-;10748:2;10743:3;10739:12;10732:19;;10392:365;;;:::o;10763:419::-;10929:4;10967:2;10956:9;10952:18;10944:26;;11016:9;11010:4;11006:20;11002:1;10991:9;10987:17;10980:47;11044:131;11170:4;11044:131;:::i;:::-;11036:139;;10763:419;;;:::o;11188:442::-;11337:4;11375:2;11364:9;11360:18;11352:26;;11388:71;11456:1;11445:9;11441:17;11432:6;11388:71;:::i;:::-;11469:72;11537:2;11526:9;11522:18;11513:6;11469:72;:::i;:::-;11551;11619:2;11608:9;11604:18;11595:6;11551:72;:::i;:::-;11188:442;;;;;;:::o;11636:180::-;11684:77;11681:1;11674:88;11781:4;11778:1;11771:15;11805:4;11802:1;11795:15;11822:98;11873:6;11907:5;11901:12;11891:22;;11822:98;;;:::o;11926:147::-;12027:11;12064:3;12049:18;;11926:147;;;;:::o;12079:373::-;12183:3;12211:38;12243:5;12211:38;:::i;:::-;12265:88;12346:6;12341:3;12265:88;:::i;:::-;12258:95;;12362:52;12407:6;12402:3;12395:4;12388:5;12384:16;12362:52;:::i;:::-;12439:6;12434:3;12430:16;12423:23;;12187:265;12079:373;;;;:::o;12458:271::-;12588:3;12610:93;12699:3;12690:6;12610:93;:::i;:::-;12603:100;;12720:3;12713:10;;12458:271;;;;:::o;12735:169::-;12875:21;12871:1;12863:6;12859:14;12852:45;12735:169;:::o;12910:366::-;13052:3;13073:67;13137:2;13132:3;13073:67;:::i;:::-;13066:74;;13149:93;13238:3;13149:93;:::i;:::-;13267:2;13262:3;13258:12;13251:19;;12910:366;;;:::o;13282:419::-;13448:4;13486:2;13475:9;13471:18;13463:26;;13535:9;13529:4;13525:20;13521:1;13510:9;13506:17;13499:47;13563:131;13689:4;13563:131;:::i;:::-;13555:139;;13282:419;;;:::o;13707:223::-;13847:34;13843:1;13835:6;13831:14;13824:58;13916:6;13911:2;13903:6;13899:15;13892:31;13707:223;:::o;13936:366::-;14078:3;14099:67;14163:2;14158:3;14099:67;:::i;:::-;14092:74;;14175:93;14264:3;14175:93;:::i;:::-;14293:2;14288:3;14284:12;14277:19;;13936:366;;;:::o;14308:419::-;14474:4;14512:2;14501:9;14497:18;14489:26;;14561:9;14555:4;14551:20;14547:1;14536:9;14532:17;14525:47;14589:131;14715:4;14589:131;:::i;:::-;14581:139;;14308:419;;;:::o;14733:143::-;14790:5;14821:6;14815:13;14806:22;;14837:33;14864:5;14837:33;:::i;:::-;14733:143;;;;:::o;14882:351::-;14952:6;15001:2;14989:9;14980:7;14976:23;14972:32;14969:119;;;15007:79;;:::i;:::-;14969:119;15127:1;15152:64;15208:7;15199:6;15188:9;15184:22;15152:64;:::i;:::-;15142:74;;15098:128;14882:351;;;;:::o;15239:332::-;15360:4;15398:2;15387:9;15383:18;15375:26;;15411:71;15479:1;15468:9;15464:17;15455:6;15411:71;:::i;:::-;15492:72;15560:2;15549:9;15545:18;15536:6;15492:72;:::i;:::-;15239:332;;;;;:::o;15577:137::-;15631:5;15662:6;15656:13;15647:22;;15678:30;15702:5;15678:30;:::i;:::-;15577:137;;;;:::o;15720:345::-;15787:6;15836:2;15824:9;15815:7;15811:23;15807:32;15804:119;;;15842:79;;:::i;:::-;15804:119;15962:1;15987:61;16040:7;16031:6;16020:9;16016:22;15987:61;:::i;:::-;15977:71;;15933:125;15720:345;;;;:::o;16071:166::-;16211:18;16207:1;16199:6;16195:14;16188:42;16071:166;:::o;16243:366::-;16385:3;16406:67;16470:2;16465:3;16406:67;:::i;:::-;16399:74;;16482:93;16571:3;16482:93;:::i;:::-;16600:2;16595:3;16591:12;16584:19;;16243:366;;;:::o;16615:419::-;16781:4;16819:2;16808:9;16804:18;16796:26;;16868:9;16862:4;16858:20;16854:1;16843:9;16839:17;16832:47;16896:131;17022:4;16896:131;:::i;:::-;16888:139;;16615:419;;;:::o;17040:442::-;17189:4;17227:2;17216:9;17212:18;17204:26;;17240:71;17308:1;17297:9;17293:17;17284:6;17240:71;:::i;:::-;17321:72;17389:2;17378:9;17374:18;17365:6;17321:72;:::i;:::-;17403;17471:2;17460:9;17456:18;17447:6;17403:72;:::i;:::-;17040:442;;;;;;:::o;17488:224::-;17628:34;17624:1;17616:6;17612:14;17605:58;17697:7;17692:2;17684:6;17680:15;17673:32;17488:224;:::o;17718:366::-;17860:3;17881:67;17945:2;17940:3;17881:67;:::i;:::-;17874:74;;17957:93;18046:3;17957:93;:::i;:::-;18075:2;18070:3;18066:12;18059:19;;17718:366;;;:::o;18090:419::-;18256:4;18294:2;18283:9;18279:18;18271:26;;18343:9;18337:4;18333:20;18329:1;18318:9;18314:17;18307:47;18371:131;18497:4;18371:131;:::i;:::-;18363:139;;18090:419;;;:::o;18515:225::-;18655:34;18651:1;18643:6;18639:14;18632:58;18724:8;18719:2;18711:6;18707:15;18700:33;18515:225;:::o;18746:366::-;18888:3;18909:67;18973:2;18968:3;18909:67;:::i;:::-;18902:74;;18985:93;19074:3;18985:93;:::i;:::-;19103:2;19098:3;19094:12;19087:19;;18746:366;;;:::o;19118:419::-;19284:4;19322:2;19311:9;19307:18;19299:26;;19371:9;19365:4;19361:20;19357:1;19346:9;19342:17;19335:47;19399:131;19525:4;19399:131;:::i;:::-;19391:139;;19118:419;;;:::o;19543:182::-;19683:34;19679:1;19671:6;19667:14;19660:58;19543:182;:::o;19731:366::-;19873:3;19894:67;19958:2;19953:3;19894:67;:::i;:::-;19887:74;;19970:93;20059:3;19970:93;:::i;:::-;20088:2;20083:3;20079:12;20072:19;;19731:366;;;:::o;20103:419::-;20269:4;20307:2;20296:9;20292:18;20284:26;;20356:9;20350:4;20346:20;20342:1;20331:9;20327:17;20320:47;20384:131;20510:4;20384:131;:::i;:::-;20376:139;;20103:419;;;:::o;20528:223::-;20668:34;20664:1;20656:6;20652:14;20645:58;20737:6;20732:2;20724:6;20720:15;20713:31;20528:223;:::o;20757:366::-;20899:3;20920:67;20984:2;20979:3;20920:67;:::i;:::-;20913:74;;20996:93;21085:3;20996:93;:::i;:::-;21114:2;21109:3;21105:12;21098:19;;20757:366;;;:::o;21129:419::-;21295:4;21333:2;21322:9;21318:18;21310:26;;21382:9;21376:4;21372:20;21368:1;21357:9;21353:17;21346:47;21410:131;21536:4;21410:131;:::i;:::-;21402:139;;21129:419;;;:::o;21554:221::-;21694:34;21690:1;21682:6;21678:14;21671:58;21763:4;21758:2;21750:6;21746:15;21739:29;21554:221;:::o;21781:366::-;21923:3;21944:67;22008:2;22003:3;21944:67;:::i;:::-;21937:74;;22020:93;22109:3;22020:93;:::i;:::-;22138:2;22133:3;22129:12;22122:19;;21781:366;;;:::o;22153:419::-;22319:4;22357:2;22346:9;22342:18;22334:26;;22406:9;22400:4;22396:20;22392:1;22381:9;22377:17;22370:47;22434:131;22560:4;22434:131;:::i;:::-;22426:139;;22153:419;;;:::o;22578:179::-;22718:31;22714:1;22706:6;22702:14;22695:55;22578:179;:::o;22763:366::-;22905:3;22926:67;22990:2;22985:3;22926:67;:::i;:::-;22919:74;;23002:93;23091:3;23002:93;:::i;:::-;23120:2;23115:3;23111:12;23104:19;;22763:366;;;:::o;23135:419::-;23301:4;23339:2;23328:9;23324:18;23316:26;;23388:9;23382:4;23378:20;23374:1;23363:9;23359:17;23352:47;23416:131;23542:4;23416:131;:::i;:::-;23408:139;;23135:419;;;:::o;23560:159::-;23700:11;23696:1;23688:6;23684:14;23677:35;23560:159;:::o;23725:365::-;23867:3;23888:66;23952:1;23947:3;23888:66;:::i;:::-;23881:73;;23963:93;24052:3;23963:93;:::i;:::-;24081:2;24076:3;24072:12;24065:19;;23725:365;;;:::o;24096:419::-;24262:4;24300:2;24289:9;24285:18;24277:26;;24349:9;24343:4;24339:20;24335:1;24324:9;24320:17;24313:47;24377:131;24503:4;24377:131;:::i;:::-;24369:139;;24096:419;;;:::o;24521:348::-;24561:7;24584:20;24602:1;24584:20;:::i;:::-;24579:25;;24618:20;24636:1;24618:20;:::i;:::-;24613:25;;24806:1;24738:66;24734:74;24731:1;24728:81;24723:1;24716:9;24709:17;24705:105;24702:131;;;24813:18;;:::i;:::-;24702:131;24861:1;24858;24854:9;24843:20;;24521:348;;;;:::o;24875:180::-;24923:77;24920:1;24913:88;25020:4;25017:1;25010:15;25044:4;25041:1;25034:15;25061:185;25101:1;25118:20;25136:1;25118:20;:::i;:::-;25113:25;;25152:20;25170:1;25152:20;:::i;:::-;25147:25;;25191:1;25181:35;;25196:18;;:::i;:::-;25181:35;25238:1;25235;25231:9;25226:14;;25061:185;;;;:::o;25252:191::-;25292:4;25312:20;25330:1;25312:20;:::i;:::-;25307:25;;25346:20;25364:1;25346:20;:::i;:::-;25341:25;;25385:1;25382;25379:8;25376:34;;;25390:18;;:::i;:::-;25376:34;25435:1;25432;25428:9;25420:17;;25252:191;;;;:::o;25449:220::-;25589:34;25585:1;25577:6;25573:14;25566:58;25658:3;25653:2;25645:6;25641:15;25634:28;25449:220;:::o;25675:366::-;25817:3;25838:67;25902:2;25897:3;25838:67;:::i;:::-;25831:74;;25914:93;26003:3;25914:93;:::i;:::-;26032:2;26027:3;26023:12;26016:19;;25675:366;;;:::o;26047:419::-;26213:4;26251:2;26240:9;26236:18;26228:26;;26300:9;26294:4;26290:20;26286:1;26275:9;26271:17;26264:47;26328:131;26454:4;26328:131;:::i;:::-;26320:139;;26047:419;;;:::o;26472:221::-;26612:34;26608:1;26600:6;26596:14;26589:58;26681:4;26676:2;26668:6;26664:15;26657:29;26472:221;:::o;26699:366::-;26841:3;26862:67;26926:2;26921:3;26862:67;:::i;:::-;26855:74;;26938:93;27027:3;26938:93;:::i;:::-;27056:2;27051:3;27047:12;27040:19;;26699:366;;;:::o;27071:419::-;27237:4;27275:2;27264:9;27260:18;27252:26;;27324:9;27318:4;27314:20;27310:1;27299:9;27295:17;27288:47;27352:131;27478:4;27352:131;:::i;:::-;27344:139;;27071:419;;;:::o;27496:224::-;27636:34;27632:1;27624:6;27620:14;27613:58;27705:7;27700:2;27692:6;27688:15;27681:32;27496:224;:::o;27726:366::-;27868:3;27889:67;27953:2;27948:3;27889:67;:::i;:::-;27882:74;;27965:93;28054:3;27965:93;:::i;:::-;28083:2;28078:3;28074:12;28067:19;;27726:366;;;:::o;28098:419::-;28264:4;28302:2;28291:9;28287:18;28279:26;;28351:9;28345:4;28341:20;28337:1;28326:9;28322:17;28315:47;28379:131;28505:4;28379:131;:::i;:::-;28371:139;;28098:419;;;:::o;28523:222::-;28663:34;28659:1;28651:6;28647:14;28640:58;28732:5;28727:2;28719:6;28715:15;28708:30;28523:222;:::o;28751:366::-;28893:3;28914:67;28978:2;28973:3;28914:67;:::i;:::-;28907:74;;28990:93;29079:3;28990:93;:::i;:::-;29108:2;29103:3;29099:12;29092:19;;28751:366;;;:::o;29123:419::-;29289:4;29327:2;29316:9;29312:18;29304:26;;29376:9;29370:4;29366:20;29362:1;29351:9;29347:17;29340:47;29404:131;29530:4;29404:131;:::i;:::-;29396:139;;29123:419;;;:::o;29548:225::-;29688:34;29684:1;29676:6;29672:14;29665:58;29757:8;29752:2;29744:6;29740:15;29733:33;29548:225;:::o;29779:366::-;29921:3;29942:67;30006:2;30001:3;29942:67;:::i;:::-;29935:74;;30018:93;30107:3;30018:93;:::i;:::-;30136:2;30131:3;30127:12;30120:19;;29779:366;;;:::o;30151:419::-;30317:4;30355:2;30344:9;30340:18;30332:26;;30404:9;30398:4;30394:20;30390:1;30379:9;30375:17;30368:47;30432:131;30558:4;30432:131;:::i;:::-;30424:139;;30151:419;;;:::o;30576:161::-;30716:13;30712:1;30704:6;30700:14;30693:37;30576:161;:::o;30743:366::-;30885:3;30906:67;30970:2;30965:3;30906:67;:::i;:::-;30899:74;;30982:93;31071:3;30982:93;:::i;:::-;31100:2;31095:3;31091:12;31084:19;;30743:366;;;:::o;31115:419::-;31281:4;31319:2;31308:9;31304:18;31296:26;;31368:9;31362:4;31358:20;31354:1;31343:9;31339:17;31332:47;31396:131;31522:4;31396:131;:::i;:::-;31388:139;;31115:419;;;:::o;31540:172::-;31680:24;31676:1;31668:6;31664:14;31657:48;31540:172;:::o;31718:366::-;31860:3;31881:67;31945:2;31940:3;31881:67;:::i;:::-;31874:74;;31957:93;32046:3;31957:93;:::i;:::-;32075:2;32070:3;32066:12;32059:19;;31718:366;;;:::o;32090:419::-;32256:4;32294:2;32283:9;32279:18;32271:26;;32343:9;32337:4;32333:20;32329:1;32318:9;32314:17;32307:47;32371:131;32497:4;32371:131;:::i;:::-;32363:139;;32090:419;;;:::o;32515:159::-;32655:11;32651:1;32643:6;32639:14;32632:35;32515:159;:::o;32680:365::-;32822:3;32843:66;32907:1;32902:3;32843:66;:::i;:::-;32836:73;;32918:93;33007:3;32918:93;:::i;:::-;33036:2;33031:3;33027:12;33020:19;;32680:365;;;:::o;33051:419::-;33217:4;33255:2;33244:9;33240:18;33232:26;;33304:9;33298:4;33294:20;33290:1;33279:9;33275:17;33268:47;33332:131;33458:4;33332:131;:::i;:::-;33324:139;;33051:419;;;:::o;33476:180::-;33524:77;33521:1;33514:88;33621:4;33618:1;33611:15;33645:4;33642:1;33635:15;33662:143;33719:5;33750:6;33744:13;33735:22;;33766:33;33793:5;33766:33;:::i;:::-;33662:143;;;;:::o;33811:351::-;33881:6;33930:2;33918:9;33909:7;33905:23;33901:32;33898:119;;;33936:79;;:::i;:::-;33898:119;34056:1;34081:64;34137:7;34128:6;34117:9;34113:22;34081:64;:::i;:::-;34071:74;;34027:128;33811:351;;;;:::o;34168:85::-;34213:7;34242:5;34231:16;;34168:85;;;:::o;34259:158::-;34317:9;34350:61;34368:42;34377:32;34403:5;34377:32;:::i;:::-;34368:42;:::i;:::-;34350:61;:::i;:::-;34337:74;;34259:158;;;:::o;34423:147::-;34518:45;34557:5;34518:45;:::i;:::-;34513:3;34506:58;34423:147;;:::o;34576:114::-;34643:6;34677:5;34671:12;34661:22;;34576:114;;;:::o;34696:184::-;34795:11;34829:6;34824:3;34817:19;34869:4;34864:3;34860:14;34845:29;;34696:184;;;;:::o;34886:132::-;34953:4;34976:3;34968:11;;35006:4;35001:3;34997:14;34989:22;;34886:132;;;:::o;35024:108::-;35101:24;35119:5;35101:24;:::i;:::-;35096:3;35089:37;35024:108;;:::o;35138:179::-;35207:10;35228:46;35270:3;35262:6;35228:46;:::i;:::-;35306:4;35301:3;35297:14;35283:28;;35138:179;;;;:::o;35323:113::-;35393:4;35425;35420:3;35416:14;35408:22;;35323:113;;;:::o;35472:732::-;35591:3;35620:54;35668:5;35620:54;:::i;:::-;35690:86;35769:6;35764:3;35690:86;:::i;:::-;35683:93;;35800:56;35850:5;35800:56;:::i;:::-;35879:7;35910:1;35895:284;35920:6;35917:1;35914:13;35895:284;;;35996:6;35990:13;36023:63;36082:3;36067:13;36023:63;:::i;:::-;36016:70;;36109:60;36162:6;36109:60;:::i;:::-;36099:70;;35955:224;35942:1;35939;35935:9;35930:14;;35895:284;;;35899:14;36195:3;36188:10;;35596:608;;;35472:732;;;;:::o;36210:831::-;36473:4;36511:3;36500:9;36496:19;36488:27;;36525:71;36593:1;36582:9;36578:17;36569:6;36525:71;:::i;:::-;36606:80;36682:2;36671:9;36667:18;36658:6;36606:80;:::i;:::-;36733:9;36727:4;36723:20;36718:2;36707:9;36703:18;36696:48;36761:108;36864:4;36855:6;36761:108;:::i;:::-;36753:116;;36879:72;36947:2;36936:9;36932:18;36923:6;36879:72;:::i;:::-;36961:73;37029:3;37018:9;37014:19;37005:6;36961:73;:::i;:::-;36210:831;;;;;;;;:::o;37047:117::-;37156:1;37153;37146:12;37170:281;37253:27;37275:4;37253:27;:::i;:::-;37245:6;37241:40;37383:6;37371:10;37368:22;37347:18;37335:10;37332:34;37329:62;37326:88;;;37394:18;;:::i;:::-;37326:88;37434:10;37430:2;37423:22;37213:238;37170:281;;:::o;37457:129::-;37491:6;37518:20;;:::i;:::-;37508:30;;37547:33;37575:4;37567:6;37547:33;:::i;:::-;37457:129;;;:::o;37592:311::-;37669:4;37759:18;37751:6;37748:30;37745:56;;;37781:18;;:::i;:::-;37745:56;37831:4;37823:6;37819:17;37811:25;;37891:4;37885;37881:15;37873:23;;37592:311;;;:::o;37909:117::-;38018:1;38015;38008:12;38049:732;38156:5;38181:81;38197:64;38254:6;38197:64;:::i;:::-;38181:81;:::i;:::-;38172:90;;38282:5;38311:6;38304:5;38297:21;38345:4;38338:5;38334:16;38327:23;;38398:4;38390:6;38386:17;38378:6;38374:30;38427:3;38419:6;38416:15;38413:122;;;38446:79;;:::i;:::-;38413:122;38561:6;38544:231;38578:6;38573:3;38570:15;38544:231;;;38653:3;38682:48;38726:3;38714:10;38682:48;:::i;:::-;38677:3;38670:61;38760:4;38755:3;38751:14;38744:21;;38620:155;38604:4;38599:3;38595:14;38588:21;;38544:231;;;38548:21;38162:619;;38049:732;;;;;:::o;38804:385::-;38886:5;38935:3;38928:4;38920:6;38916:17;38912:27;38902:122;;38943:79;;:::i;:::-;38902:122;39053:6;39047:13;39078:105;39179:3;39171:6;39164:4;39156:6;39152:17;39078:105;:::i;:::-;39069:114;;38892:297;38804:385;;;;:::o;39195:554::-;39290:6;39339:2;39327:9;39318:7;39314:23;39310:32;39307:119;;;39345:79;;:::i;:::-;39307:119;39486:1;39475:9;39471:17;39465:24;39516:18;39508:6;39505:30;39502:117;;;39538:79;;:::i;:::-;39502:117;39643:89;39724:7;39715:6;39704:9;39700:22;39643:89;:::i;:::-;39633:99;;39436:306;39195:554;;;;:::o

Swarm Source

ipfs://76d30da429200f0b0f83ba64bfebe9fa1328f0fa83dea64990d613556b82d2c5
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.