ETH Price: $3,033.57 (+4.01%)
 

Overview

Max Total Supply

100,000,000 PEPEBANK

Holders

15

Total Transfers

-

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

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:
PepeBank

Compiler Version
v0.8.15+commit.e14f2714

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

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

/**

https://t.me/PepeBankPortal

*/

// SPDX-License-Identifier: None
pragma solidity 0.8.15;

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

    function _msgData() internal view virtual returns (bytes calldata) {
        this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
        return msg.data;
    }
}

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

    function name() external pure returns (string memory);

    function symbol() external pure returns (string memory);

    function decimals() external pure returns (uint8);

    function totalSupply() external view returns (uint256);

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

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

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

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

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

    function DOMAIN_SEPARATOR() external view returns (bytes32);

    function PERMIT_TYPEHASH() external pure returns (bytes32);

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

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

    function MINIMUM_LIQUIDITY() external pure returns (uint256);

    function factory() external view returns (address);

    function token0() external view returns (address);

    function token1() external view returns (address);

    function getReserves()
        external
        view
        returns (
            uint112 reserve0,
            uint112 reserve1,
            uint32 blockTimestampLast
        );

    function price0CumulativeLast() external view returns (uint256);

    function price1CumulativeLast() external view returns (uint256);

    function kLast() external view returns (uint256);

    function mint(address to) external returns (uint256 liquidity);

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

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

    function skim(address to) external;

    function sync() external;

    function initialize(address, address) external;
}

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

    function feeTo() external view returns (address);

    function feeToSetter() external view returns (address);

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

    function allPairs(uint256) external view returns (address pair);

    function allPairsLength() external view returns (uint256);

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

    function setFeeTo(address) external;

    function setFeeToSetter(address) external;
}

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

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

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

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

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

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

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

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

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

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

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

contract ERC20 is Context, IERC20, IERC20Metadata {
    using SafeMath for uint256;

    mapping(address => uint256) private _balances;

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

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

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

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

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

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

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

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

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

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

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

    /**
     * @dev See {IERC20-transferFrom}.
     *
     * Emits an {Approval} event indicating the updated allowance. This is not
     * required by the EIP. See the note at the beginning of {ERC20}.
     *
     * Requirements:
     *
     * - `sender` and `recipient` cannot be the zero address.
     * - `sender` must have a balance of at least `amount`.
     * - the caller must have allowance for ``sender``'s tokens of at least
     * `amount`.
     */
    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) public virtual override returns (bool) {
        _transfer(sender, recipient, amount);
        _approve(
            sender,
            _msgSender(),
            _allowances[sender][_msgSender()].sub(
                amount,
                "ERC20: transfer amount exceeds allowance"
            )
        );
        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)
    {
        _approve(
            _msgSender(),
            spender,
            _allowances[_msgSender()][spender].add(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)
    {
        _approve(
            _msgSender(),
            spender,
            _allowances[_msgSender()][spender].sub(
                subtractedValue,
                "ERC20: decreased allowance below zero"
            )
        );
        return true;
    }

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

        _beforeTokenTransfer(sender, recipient, amount);

        _balances[sender] = _balances[sender].sub(
            amount,
            "ERC20: transfer amount exceeds balance"
        );
        _balances[recipient] = _balances[recipient].add(amount);
        emit Transfer(sender, recipient, amount);
    }

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

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

        _totalSupply = _totalSupply.add(amount);
        _balances[account] = _balances[account].add(amount);
        emit Transfer(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);

        _balances[account] = _balances[account].sub(
            amount,
            "ERC20: burn amount exceeds balance"
        );
        _totalSupply = _totalSupply.sub(amount);
        emit Transfer(account, address(0), amount);
    }

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

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

    /**
     * @dev Hook that is called before any transfer of tokens. This includes
     * minting and burning.
     *
     * Calling conditions:
     *
     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens
     * will be to 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 {}
}

library SafeMath {
    /**
     * @dev Returns the addition of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `+` operator.
     *
     * Requirements:
     *
     * - Addition cannot overflow.
     */
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");

        return c;
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return sub(a, b, "SafeMath: subtraction overflow");
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        require(b <= a, errorMessage);
        uint256 c = a - b;

        return c;
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `*` operator.
     *
     * Requirements:
     *
     * - Multiplication cannot overflow.
     */
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
        // benefit is lost if 'b' is also tested.
        // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
        if (a == 0) {
            return 0;
        }

        uint256 c = a * b;
        require(c / a == b, "SafeMath: multiplication overflow");

        return c;
    }

    /**
     * @dev Returns the integer division of two unsigned integers. Reverts on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator. Note: this function uses a
     * `revert` opcode (which leaves remaining gas untouched) while Solidity
     * uses an invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return div(a, b, "SafeMath: division by zero");
    }

    /**
     * @dev Returns the integer division of two unsigned integers. Reverts with custom message on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator. Note: this function uses a
     * `revert` opcode (which leaves remaining gas untouched) while Solidity
     * uses an invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        require(b > 0, errorMessage);
        uint256 c = a / b;
        // assert(a == b * c + a % b); // There is no case in which this doesn't hold

        return c;
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * Reverts when dividing by zero.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return mod(a, b, "SafeMath: modulo by zero");
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * Reverts with custom message when dividing by zero.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        require(b != 0, errorMessage);
        return a % b;
    }
}

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() {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }

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

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

    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions anymore. Can only be called by the current owner.
     *
     * NOTE: Renouncing ownership will leave the contract without an owner,
     * thereby removing any functionality that is only available to the owner.
     */
    function renounceOwnership() public virtual onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = 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"
        );
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }
    
}

library SafeMathInt {
    int256 private constant MIN_INT256 = int256(1) << 255;
    int256 private constant MAX_INT256 = ~(int256(1) << 255);

    /**
     * @dev Multiplies two int256 variables and fails on overflow.
     */
    function mul(int256 a, int256 b) internal pure returns (int256) {
        int256 c = a * b;

        // Detect overflow when multiplying MIN_INT256 with -1
        require(c != MIN_INT256 || (a & MIN_INT256) != (b & MIN_INT256));
        require((b == 0) || (c / b == a));
        return c;
    }

    /**
     * @dev Division of two int256 variables and fails on overflow.
     */
    function div(int256 a, int256 b) internal pure returns (int256) {
        // Prevent overflow when dividing MIN_INT256 by -1
        require(b != -1 || a != MIN_INT256);

        // Solidity already throws when dividing by 0.
        return a / b;
    }

    /**
     * @dev Subtracts two int256 variables and fails on overflow.
     */
    function sub(int256 a, int256 b) internal pure returns (int256) {
        int256 c = a - b;
        require((b >= 0 && c <= a) || (b < 0 && c > a));
        return c;
    }

    /**
     * @dev Adds two int256 variables and fails on overflow.
     */
    function add(int256 a, int256 b) internal pure returns (int256) {
        int256 c = a + b;
        require((b >= 0 && c >= a) || (b < 0 && c < a));
        return c;
    }

    /**
     * @dev Converts to absolute value, and fails on overflow.
     */
    function abs(int256 a) internal pure returns (int256) {
        require(a != MIN_INT256);
        return a < 0 ? -a : a;
    }

    function toUint256Safe(int256 a) internal pure returns (uint256) {
        require(a >= 0);
        return uint256(a);
    }
}

library SafeMathUint {
    function toInt256Safe(uint256 a) internal pure returns (int256) {
        int256 b = int256(a);
        require(b >= 0);
        return b;
    }
}

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

    function WETH() external pure returns (address);

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

contract PepeBank is ERC20, Ownable {
    using SafeMath for uint256;

    IUniswapV2Router02 public immutable uniswapV2Router;
    address public immutable uniswapV2Pair;

    address public pepeBuyBackWallet;
    address public pepeAddress;

    // limits
    uint256 private maxBuyAmount;
    uint256 private maxSellAmount;
    uint256 private maxWallet;

    uint256 private swapThreshold;

    // status flags
    bool private tradingActive = false;
    bool public isSwapEnabled = false;
    bool public isSwapping;

    // Blacklist Map
    mapping(address => bool) private _blacklist;

    uint256 public buyFee;
    uint256 public sellFee;

    uint256 public tokensForpepe;

    // exclude from fees and max transaction amount
    mapping(address => bool) private _isExcludedFromFees;
    mapping(address => bool) public _isExcludedMaxTransactionAmount;
    mapping(address => bool) public _isExcludedMaxWalletAmount;

    // store addresses that a automatic market maker pairs. Any transfer *to* these addresses
    // could be subject to a maximum transfer amount
    mapping(address => bool) public makerPairs;

    event SwapAndLiquify(
        uint256 tokensSwapped,
        uint256 ethReceived,
        uint256 tokensIntoLiquidity
    );

    constructor()
        ERC20("Pepe Bank", "PEPEBANK")
    {
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        pepeAddress = 0x4A27e9aAb8F8bA9de06766C8476eD1D16494E35F;
        excludeFromMaxTransaction(address(_uniswapV2Router), true);
        uniswapV2Router = _uniswapV2Router;

        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory())
            .createPair(address(this), _uniswapV2Router.WETH());
        excludeFromMaxTransaction(address(uniswapV2Pair), true);
        makerPairs[address(uniswapV2Pair)] = true;

        approve(address(_uniswapV2Router), type(uint256).max);
        uint256 totalSupply = 1 * 1e8 * 1e18;

        maxBuyAmount = totalSupply / 100; // 1% maxTransactionAmountTxn
        maxSellAmount = totalSupply / 100; // 1% maxTransactionAmountTxn
        maxWallet = (totalSupply * 1) / 100; // 1% maxWallet
        swapThreshold = (totalSupply * 1) / 10000; // 0.01% swap wallet

        buyFee = 6;
        sellFee = 6;

        pepeBuyBackWallet = address(0xDe7EC9d4932eeCB60b68C2B6B75d9Ef755e6916C);

        // exclude from paying fees or having max transaction amount
        excludeFromFees(owner(), true);
        excludeFromFees(address(this), true);

        excludeFromMaxTransaction(owner(), true);
        excludeFromMaxTransaction(address(this), true);

        excludeFromWalletLimit(owner(), true);
        excludeFromWalletLimit(address(this), true);
        excludeFromWalletLimit(address(uniswapV2Pair), true);

        /*
            _mint is an internal function in ERC20.sol that is only called here,
            and CANNOT be called ever again
        */

        _mint(msg.sender, totalSupply);
    }

    receive() external payable {}

    // once enabled, can never be turned off
    function enableTrading() external onlyOwner {
        tradingActive = true;
        isSwapEnabled = true;
    }

    // change the minimum amount of tokens to sell from fees
    function updateSwapThreshold(uint256 newAmount)
        external
        onlyOwner
        returns (bool)
    {
        swapThreshold = newAmount;
        return true;
    }

    function updateMaxTxnAmount(
        uint256 newMaxBuyAmount,
        uint256 newMaxSellAmount
    ) external onlyOwner {
        require(
            ((totalSupply() * newMaxBuyAmount) / 1000) >= (totalSupply() / 5000),
            "Cannot set maxTransactionAmounts lower than 0.5%"
        );
        require(
            ((totalSupply() * newMaxSellAmount) / 1000) >= (totalSupply() / 5000),
            "Cannot set maxTransactionAmounts lower than 0.5%"
        );
        maxBuyAmount = (totalSupply() * newMaxBuyAmount) / 1000;
        maxSellAmount = (totalSupply() * newMaxSellAmount) / 1000;
    }

    function updateMaxWalletAmount(uint256 newPercentage) external onlyOwner {
        require( ((totalSupply() * newPercentage) / 1000) >= (totalSupply() / 5000), "Cannot set maxWallet lower than 0.5%");
        maxWallet = (totalSupply() * newPercentage) / 1000;
    }

    // only use to disable contract sales if absolutely necessary (emergency use only)
    function updateSwapEnabled(bool enabled) external onlyOwner {
        isSwapEnabled = enabled;
    }

    function updateFees(uint256 _buyFee, uint256 _sellFee) external onlyOwner {
        buyFee = _buyFee;
        sellFee = _sellFee;
    }

    function excludeFromFees(address account, bool excluded) public onlyOwner {
        _isExcludedFromFees[account] = excluded;
    }

    function excludeFromWalletLimit(address account, bool excluded)
        public
        onlyOwner
    {
        _isExcludedMaxWalletAmount[account] = excluded;
    }

    function excludeFromMaxTransaction(address updAds, bool isEx)
        public
        onlyOwner
    {
        _isExcludedMaxTransactionAmount[updAds] = isEx;
    }

    function setAutomatedMarketMakerPair(address pair, bool value)
        public
        onlyOwner
    {
        require(
            pair != uniswapV2Pair,
            "The pair cannot be removed from makerPairs"
        );
        makerPairs[pair] = value;
    }

    function updateWallets(address newpepeBuyBackWallet) external onlyOwner {
        pepeBuyBackWallet = newpepeBuyBackWallet;
    }

    function isExcludedFromFees(address account) public view returns (bool) {
        return _isExcludedFromFees[account];
    }

    uint256 public swaped = 0;

    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal override {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        require(from != address(0xdEaD),"ERC20: transfer from the dEaD address");
        require(to != address(0xdEaD), "ERC20: transfer to the dEaD address");
        require(!_blacklist[to] && !_blacklist[from],"You have been blacklisted from transfering tokens");

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

        if (from != owner() && to != owner() && !isSwapping) {
            if (!tradingActive) {
                require(
                    _isExcludedFromFees[from] || _isExcludedFromFees[to],
                    "Trading is not active."
                );
            }

            //when buy
            if (
                makerPairs[from] &&
                !_isExcludedMaxTransactionAmount[to]
            ) {
                require(
                    amount <= maxBuyAmount,
                    "Buy transfer amount exceeds the maxTransactionAmount."
                );
            }
            //when sell
            else if (
                makerPairs[to] &&
                !_isExcludedMaxTransactionAmount[from]
            ) {
                require(
                    amount <= maxSellAmount,
                    "Sell transfer amount exceeds the maxTransactionAmount."
                );
            }
            if (!_isExcludedMaxWalletAmount[to]) {
                require(
                    amount + balanceOf(to) <= maxWallet,
                    "Max wallet exceeded"
                );
            }
        }

        if (
            (balanceOf(address(this)) >= swapThreshold) &&
            !isSwapping &&
            makerPairs[to] &&
            !_isExcludedFromFees[from] &&
            isSwapEnabled &&
            !_isExcludedFromFees[to]
        ) {
            isSwapping = true;
            swapBuyBack();
            isSwapping = false;
        }

        bool takeFee = !isSwapping;

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

        uint256 fees = 0;
        // only take fees on buys/sells, do not take on wallet transfers
        if (takeFee) {
            // on sell

            if (makerPairs[to] && sellFee > 0) {
                fees = amount.mul(sellFee).div(100);
            }
            // on buy
            else if (makerPairs[from] && buyFee > 0) {
                fees = amount.mul(buyFee).div(100);
            }

            if (fees > 0) {
                super._transfer(from, address(this), fees);
                tokensForpepe += fees;
                amount -= fees;
            }
        }

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

    function swapBuyBack() private {
        uint256 contractBalance = balanceOf(address(this));

        if (contractBalance == 0 || tokensForpepe == 0) {
            return;
        }

        uint256 forSwap = tokensForpepe;
        if (tokensForpepe > contractBalance) {
            forSwap = contractBalance;
        }

        _approve(address(this), address(uniswapV2Router), forSwap);

        address[] memory path = new address[](3);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();
        path[2] = pepeAddress;

        uniswapV2Router.swapExactTokensForTokensSupportingFeeOnTransferTokens(
            forSwap,
            0,
            path,
            pepeBuyBackWallet,
            block.timestamp
        );
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiquidity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxWalletAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromWalletLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isSwapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isSwapping","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"makerPairs","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":"pepeAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pepeBuyBackWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swaped","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":"tokensForpepe","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_buyFee","type":"uint256"},{"internalType":"uint256","name":"_sellFee","type":"uint256"}],"name":"updateFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newMaxBuyAmount","type":"uint256"},{"internalType":"uint256","name":"newMaxSellAmount","type":"uint256"}],"name":"updateMaxTxnAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newPercentage","type":"uint256"}],"name":"updateMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"updateSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateSwapThreshold","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newpepeBuyBackWallet","type":"address"}],"name":"updateWallets","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c06040526000600c60006101000a81548160ff0219169083151502179055506000600c60016101000a81548160ff02191690831515021790555060006015553480156200004c57600080fd5b506040518060400160405280600981526020017f506570652042616e6b00000000000000000000000000000000000000000000008152506040518060400160405280600881526020017f5045504542414e4b0000000000000000000000000000000000000000000000008152508160039081620000ca919062000feb565b508060049081620000dc919062000feb565b5050506000620000f16200063360201b60201c565b905080600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3506000737a250d5630b4cf539739df2c5dacb4c659f2488d9050734a27e9aab8f8ba9de06766c8476ed1d16494e35f600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620002118160016200063b60201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000291573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002b791906200113c565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200031f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200034591906200113c565b6040518363ffffffff1660e01b8152600401620003649291906200117f565b6020604051808303816000875af115801562000384573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003aa91906200113c565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff1681525050620003f260a05160016200063b60201b60201c565b60016014600060a05173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506200047e817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6200073860201b60201c565b5060006a52b7d2dcc80cd2e400000090506064816200049e91906200120a565b600881905550606481620004b391906200120a565b6009819055506064600182620004ca919062001242565b620004d691906200120a565b600a81905550612710600182620004ee919062001242565b620004fa91906200120a565b600b819055506006600e819055506006600f8190555073de7ec9d4932eecb60b68c2b6b75d9ef755e6916c600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555062000587620005796200076660201b60201c565b60016200079060201b60201c565b6200059a3060016200079060201b60201c565b620005bc620005ae6200076660201b60201c565b60016200063b60201b60201c565b620005cf3060016200063b60201b60201c565b620005f1620005e36200076660201b60201c565b60016200088d60201b60201c565b620006043060016200088d60201b60201c565b6200061960a05160016200088d60201b60201c565b6200062b33826200098a60201b60201c565b5050620015c5565b600033905090565b6200064b6200063360201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614620006dd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620006d49062001304565b60405180910390fd5b80601260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60006200075c6200074e6200063360201b60201c565b848462000b3860201b60201c565b6001905092915050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b620007a06200063360201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161462000832576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620008299062001304565b60405180910390fd5b80601160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6200089d6200063360201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146200092f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620009269062001304565b60405180910390fd5b80601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603620009fc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620009f39062001376565b60405180910390fd5b62000a106000838362000d0960201b60201c565b62000a2c8160025462000d0e60201b62001de31790919060201c565b60028190555062000a8a816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205462000d0e60201b62001de31790919060201c565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000b2c9190620013a9565b60405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160362000baa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000ba1906200143c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362000c1c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000c1390620014d4565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405162000cfc9190620013a9565b60405180910390a3505050565b505050565b600080828462000d1f9190620014f6565b90508381101562000d67576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000d5e90620015a3565b60405180910390fd5b8091505092915050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000df357607f821691505b60208210810362000e095762000e0862000dab565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b60006008830262000e737fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000e34565b62000e7f868362000e34565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b600062000ecc62000ec662000ec08462000e97565b62000ea1565b62000e97565b9050919050565b6000819050919050565b62000ee88362000eab565b62000f0062000ef78262000ed3565b84845462000e41565b825550505050565b600090565b62000f1762000f08565b62000f2481848462000edd565b505050565b5b8181101562000f4c5762000f4060008262000f0d565b60018101905062000f2a565b5050565b601f82111562000f9b5762000f658162000e0f565b62000f708462000e24565b8101602085101562000f80578190505b62000f9862000f8f8562000e24565b83018262000f29565b50505b505050565b600082821c905092915050565b600062000fc06000198460080262000fa0565b1980831691505092915050565b600062000fdb838362000fad565b9150826002028217905092915050565b62000ff68262000d71565b67ffffffffffffffff81111562001012576200101162000d7c565b5b6200101e825462000dda565b6200102b82828562000f50565b600060209050601f8311600181146200106357600084156200104e578287015190505b6200105a858262000fcd565b865550620010ca565b601f198416620010738662000e0f565b60005b828110156200109d5784890151825560018201915060208501945060208101905062001076565b86831015620010bd5784890151620010b9601f89168262000fad565b8355505b6001600288020188555050505b505050505050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006200110482620010d7565b9050919050565b6200111681620010f7565b81146200112257600080fd5b50565b60008151905062001136816200110b565b92915050565b600060208284031215620011555762001154620010d2565b5b6000620011658482850162001125565b91505092915050565b6200117981620010f7565b82525050565b60006040820190506200119660008301856200116e565b620011a560208301846200116e565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000620012178262000e97565b9150620012248362000e97565b925082620012375762001236620011ac565b5b828204905092915050565b60006200124f8262000e97565b91506200125c8362000e97565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615620012985762001297620011db565b5b828202905092915050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000620012ec602083620012a3565b9150620012f982620012b4565b602082019050919050565b600060208201905081810360008301526200131f81620012dd565b9050919050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b60006200135e601f83620012a3565b91506200136b8262001326565b602082019050919050565b6000602082019050818103600083015262001391816200134f565b9050919050565b620013a38162000e97565b82525050565b6000602082019050620013c0600083018462001398565b92915050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600062001424602483620012a3565b91506200143182620013c6565b604082019050919050565b60006020820190508181036000830152620014578162001415565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000620014bc602283620012a3565b9150620014c9826200145e565b604082019050919050565b60006020820190508181036000830152620014ef81620014ad565b9050919050565b6000620015038262000e97565b9150620015108362000e97565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115620015485762001547620011db565b5b828201905092915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b60006200158b601b83620012a3565b9150620015988262001553565b602082019050919050565b60006020820190508181036000830152620015be816200157c565b9050919050565b60805160a05161447b6200160760003960008181610ecb015261159c015260008181610c0e01528181612dd301528181612e970152612fe5015261447b6000f3fe6080604052600436106102345760003560e01c8063715018a61161012e578063b8863115116100ab578063e16830a81161006f578063e16830a814610896578063e61f55d3146108bf578063ead3f5f0146108ea578063f2fde38b14610915578063f68912cd1461093e5761023b565b8063b88631151461079f578063c0246668146107ca578063c18bc195146107f3578063cc274b291461081c578063dd62ed3e146108595761023b565b806395d89b41116100f257806395d89b411461069457806396880b17146106bf5780639a7a23d6146106fc578063a457c2d714610725578063a9059cbb146107625761023b565b8063715018a6146105e95780637571336a146106005780638a8c523c146106295780638da5cb5b14610640578063924de9b71461066b5761023b565b8063313ce567116101bc5780634fbee193116101805780634fbee193146104de57806354025bab1461051b57806369401241146105465780636db794371461058357806370a08231146105ac5761023b565b8063313ce567146103f5578063351a964d14610420578063395093511461044b578063470624021461048857806349bd5a5e146104b35761023b565b80631694505e116102035780631694505e1461030e57806318160ddd1461033957806323b872dd146103645780632851a5cf146103a15780632b14ca56146103ca5761023b565b806306fdde0314610240578063095ea7b31461026b57806310d5de53146102a857806311a582c3146102e55761023b565b3661023b57005b600080fd5b34801561024c57600080fd5b50610255610969565b6040516102629190613264565b60405180910390f35b34801561027757600080fd5b50610292600480360381019061028d919061331f565b6109fb565b60405161029f919061337a565b60405180910390f35b3480156102b457600080fd5b506102cf60048036038101906102ca9190613395565b610a19565b6040516102dc919061337a565b60405180910390f35b3480156102f157600080fd5b5061030c600480360381019061030791906133c2565b610a39565b005b34801561031a57600080fd5b50610323610c0c565b6040516103309190613461565b60405180910390f35b34801561034557600080fd5b5061034e610c30565b60405161035b919061348b565b60405180910390f35b34801561037057600080fd5b5061038b600480360381019061038691906134a6565b610c3a565b604051610398919061337a565b60405180910390f35b3480156103ad57600080fd5b506103c860048036038101906103c39190613395565b610d13565b005b3480156103d657600080fd5b506103df610dee565b6040516103ec919061348b565b60405180910390f35b34801561040157600080fd5b5061040a610df4565b6040516104179190613515565b60405180910390f35b34801561042c57600080fd5b50610435610dfd565b604051610442919061337a565b60405180910390f35b34801561045757600080fd5b50610472600480360381019061046d919061331f565b610e10565b60405161047f919061337a565b60405180910390f35b34801561049457600080fd5b5061049d610ec3565b6040516104aa919061348b565b60405180910390f35b3480156104bf57600080fd5b506104c8610ec9565b6040516104d5919061353f565b60405180910390f35b3480156104ea57600080fd5b5061050560048036038101906105009190613395565b610eed565b604051610512919061337a565b60405180910390f35b34801561052757600080fd5b50610530610f43565b60405161053d919061348b565b60405180910390f35b34801561055257600080fd5b5061056d60048036038101906105689190613395565b610f49565b60405161057a919061337a565b60405180910390f35b34801561058f57600080fd5b506105aa60048036038101906105a591906133c2565b610f69565b005b3480156105b857600080fd5b506105d360048036038101906105ce9190613395565b611012565b6040516105e0919061348b565b60405180910390f35b3480156105f557600080fd5b506105fe61105a565b005b34801561060c57600080fd5b5061062760048036038101906106229190613586565b6111b2565b005b34801561063557600080fd5b5061063e6112a4565b005b34801561064c57600080fd5b50610655611373565b604051610662919061353f565b60405180910390f35b34801561067757600080fd5b50610692600480360381019061068d91906135c6565b61139d565b005b3480156106a057600080fd5b506106a9611451565b6040516106b69190613264565b60405180910390f35b3480156106cb57600080fd5b506106e660048036038101906106e19190613395565b6114e3565b6040516106f3919061337a565b60405180910390f35b34801561070857600080fd5b50610723600480360381019061071e9190613586565b611503565b005b34801561073157600080fd5b5061074c6004803603810190610747919061331f565b611683565b604051610759919061337a565b60405180910390f35b34801561076e57600080fd5b506107896004803603810190610784919061331f565b611750565b604051610796919061337a565b60405180910390f35b3480156107ab57600080fd5b506107b461176e565b6040516107c1919061337a565b60405180910390f35b3480156107d657600080fd5b506107f160048036038101906107ec9190613586565b611781565b005b3480156107ff57600080fd5b5061081a600480360381019061081591906135f3565b611873565b005b34801561082857600080fd5b50610843600480360381019061083e91906135f3565b6119a9565b604051610850919061337a565b60405180910390f35b34801561086557600080fd5b50610880600480360381019061087b9190613620565b611a52565b60405161088d919061348b565b60405180910390f35b3480156108a257600080fd5b506108bd60048036038101906108b89190613586565b611ad9565b005b3480156108cb57600080fd5b506108d4611bcb565b6040516108e1919061348b565b60405180910390f35b3480156108f657600080fd5b506108ff611bd1565b60405161090c919061353f565b60405180910390f35b34801561092157600080fd5b5061093c60048036038101906109379190613395565b611bf7565b005b34801561094a57600080fd5b50610953611dbd565b604051610960919061353f565b60405180910390f35b6060600380546109789061368f565b80601f01602080910402602001604051908101604052809291908181526020018280546109a49061368f565b80156109f15780601f106109c6576101008083540402835291602001916109f1565b820191906000526020600020905b8154815290600101906020018083116109d457829003601f168201915b5050505050905090565b6000610a0f610a08611e41565b8484611e49565b6001905092915050565b60126020528060005260406000206000915054906101000a900460ff1681565b610a41611e41565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610ad0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ac79061370c565b60405180910390fd5b611388610adb610c30565b610ae5919061378a565b6103e883610af1610c30565b610afb91906137bb565b610b05919061378a565b1015610b46576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b3d90613887565b60405180910390fd5b611388610b51610c30565b610b5b919061378a565b6103e882610b67610c30565b610b7191906137bb565b610b7b919061378a565b1015610bbc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bb390613887565b60405180910390fd5b6103e882610bc8610c30565b610bd291906137bb565b610bdc919061378a565b6008819055506103e881610bee610c30565b610bf891906137bb565b610c02919061378a565b6009819055505050565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600254905090565b6000610c47848484612012565b610d0884610c53611e41565b610d03856040518060600160405280602881526020016143f960289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610cb9611e41565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612a989092919063ffffffff16565b611e49565b600190509392505050565b610d1b611e41565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610daa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610da19061370c565b60405180910390fd5b80600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600f5481565b60006012905090565b600c60019054906101000a900460ff1681565b6000610eb9610e1d611e41565b84610eb48560016000610e2e611e41565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611de390919063ffffffff16565b611e49565b6001905092915050565b600e5481565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000601160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60105481565b60146020528060005260406000206000915054906101000a900460ff1681565b610f71611e41565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611000576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ff79061370c565b60405180910390fd5b81600e8190555080600f819055505050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611062611e41565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146110f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110e89061370c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6111ba611e41565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611249576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112409061370c565b60405180910390fd5b80601260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6112ac611e41565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461133b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113329061370c565b60405180910390fd5b6001600c60006101000a81548160ff0219169083151502179055506001600c60016101000a81548160ff021916908315150217905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6113a5611e41565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611434576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161142b9061370c565b60405180910390fd5b80600c60016101000a81548160ff02191690831515021790555050565b6060600480546114609061368f565b80601f016020809104026020016040519081016040528092919081815260200182805461148c9061368f565b80156114d95780601f106114ae576101008083540402835291602001916114d9565b820191906000526020600020905b8154815290600101906020018083116114bc57829003601f168201915b5050505050905090565b60136020528060005260406000206000915054906101000a900460ff1681565b61150b611e41565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461159a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115919061370c565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611628576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161161f90613919565b60405180910390fd5b80601460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6000611746611690611e41565b846117418560405180606001604052806025815260200161442160259139600160006116ba611e41565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612a989092919063ffffffff16565b611e49565b6001905092915050565b600061176461175d611e41565b8484612012565b6001905092915050565b600c60029054906101000a900460ff1681565b611789611e41565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611818576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161180f9061370c565b60405180910390fd5b80601160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b61187b611e41565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461190a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119019061370c565b60405180910390fd5b611388611915610c30565b61191f919061378a565b6103e88261192b610c30565b61193591906137bb565b61193f919061378a565b1015611980576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611977906139ab565b60405180910390fd5b6103e88161198c610c30565b61199691906137bb565b6119a0919061378a565b600a8190555050565b60006119b3611e41565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611a42576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a399061370c565b60405180910390fd5b81600b8190555060019050919050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b611ae1611e41565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611b70576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b679061370c565b60405180910390fd5b80601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60155481565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611bff611e41565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611c8e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c859061370c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611cfd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cf490613a3d565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000808284611df29190613a5d565b905083811015611e37576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e2e90613aff565b60405180910390fd5b8091505092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611eb8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eaf90613b91565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611f27576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f1e90613c23565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612005919061348b565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612081576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161207890613cb5565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036120f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120e790613d47565b60405180910390fd5b61dead73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612160576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161215790613dd9565b60405180910390fd5b61dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036121d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121c790613e6b565b60405180910390fd5b600d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156122745750600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b6122b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122aa90613efd565b60405180910390fd5b600081036122cc576122c783836000612afc565b612a93565b6122d4611373565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156123425750612312611373565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561235b5750600c60029054906101000a900460ff16155b156126e157600c60009054906101000a900460ff1661245557601160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806124155750601160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612454576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161244b90613f69565b60405180910390fd5b5b601460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156124f85750601260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561254757600854811115612542576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161253990613ffb565b60405180910390fd5b612636565b601460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156125ea5750601260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561263557600954811115612634576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161262b9061408d565b60405180910390fd5b5b5b601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166126e057600a5461269383611012565b8261269e9190613a5d565b11156126df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126d6906140f9565b60405180910390fd5b5b5b600b546126ed30611012565b101580156127085750600c60029054906101000a900460ff16155b801561275d5750601460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b80156127b35750601160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156127cb5750600c60019054906101000a900460ff165b80156128215750601160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612865576001600c60026101000a81548160ff021916908315150217905550612849612d8f565b6000600c60026101000a81548160ff0219169083151502179055505b6000600c60029054906101000a900460ff16159050601160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061291b5750601160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561292557600090505b60008115612a8557601460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561298857506000600f54115b156129bc576129b560646129a7600f548661309f90919063ffffffff16565b61311990919063ffffffff16565b9050612a48565b601460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612a1757506000600e54115b15612a4757612a446064612a36600e548661309f90919063ffffffff16565b61311990919063ffffffff16565b90505b5b6000811115612a8457612a5c853083612afc565b8060106000828254612a6e9190613a5d565b925050819055508083612a819190614119565b92505b5b612a90858585612afc565b50505b505050565b6000838311158290612ae0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ad79190613264565b60405180910390fd5b5060008385612aef9190614119565b9050809150509392505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612b6b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b6290613cb5565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612bda576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bd190613d47565b60405180910390fd5b612be5838383613163565b612c50816040518060600160405280602681526020016143d3602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612a989092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612ce3816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611de390919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051612d82919061348b565b60405180910390a3505050565b6000612d9a30611012565b90506000811480612dad57506000601054145b15612db8575061309d565b60006010549050816010541115612dcd578190505b612df8307f000000000000000000000000000000000000000000000000000000000000000083611e49565b6000600367ffffffffffffffff811115612e1557612e1461414d565b5b604051908082528060200260200182016040528015612e435781602001602082028036833780820191505090505b5090503081600081518110612e5b57612e5a61417c565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612f00573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f2491906141c0565b81600181518110612f3857612f3761417c565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681600281518110612fa957612fa861417c565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16635c11d79583600084600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518663ffffffff1660e01b81526004016130679594939291906142e6565b600060405180830381600087803b15801561308157600080fd5b505af1158015613095573d6000803e3d6000fd5b505050505050505b565b60008083036130b15760009050613113565b600082846130bf91906137bb565b90508284826130ce919061378a565b1461310e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613105906143b2565b60405180910390fd5b809150505b92915050565b600061315b83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613168565b905092915050565b505050565b600080831182906131af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131a69190613264565b60405180910390fd5b50600083856131be919061378a565b9050809150509392505050565b600081519050919050565b600082825260208201905092915050565b60005b838110156132055780820151818401526020810190506131ea565b83811115613214576000848401525b50505050565b6000601f19601f8301169050919050565b6000613236826131cb565b61324081856131d6565b93506132508185602086016131e7565b6132598161321a565b840191505092915050565b6000602082019050818103600083015261327e818461322b565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006132b68261328b565b9050919050565b6132c6816132ab565b81146132d157600080fd5b50565b6000813590506132e3816132bd565b92915050565b6000819050919050565b6132fc816132e9565b811461330757600080fd5b50565b600081359050613319816132f3565b92915050565b6000806040838503121561333657613335613286565b5b6000613344858286016132d4565b92505060206133558582860161330a565b9150509250929050565b60008115159050919050565b6133748161335f565b82525050565b600060208201905061338f600083018461336b565b92915050565b6000602082840312156133ab576133aa613286565b5b60006133b9848285016132d4565b91505092915050565b600080604083850312156133d9576133d8613286565b5b60006133e78582860161330a565b92505060206133f88582860161330a565b9150509250929050565b6000819050919050565b600061342761342261341d8461328b565b613402565b61328b565b9050919050565b60006134398261340c565b9050919050565b600061344b8261342e565b9050919050565b61345b81613440565b82525050565b60006020820190506134766000830184613452565b92915050565b613485816132e9565b82525050565b60006020820190506134a0600083018461347c565b92915050565b6000806000606084860312156134bf576134be613286565b5b60006134cd868287016132d4565b93505060206134de868287016132d4565b92505060406134ef8682870161330a565b9150509250925092565b600060ff82169050919050565b61350f816134f9565b82525050565b600060208201905061352a6000830184613506565b92915050565b613539816132ab565b82525050565b60006020820190506135546000830184613530565b92915050565b6135638161335f565b811461356e57600080fd5b50565b6000813590506135808161355a565b92915050565b6000806040838503121561359d5761359c613286565b5b60006135ab858286016132d4565b92505060206135bc85828601613571565b9150509250929050565b6000602082840312156135dc576135db613286565b5b60006135ea84828501613571565b91505092915050565b60006020828403121561360957613608613286565b5b60006136178482850161330a565b91505092915050565b6000806040838503121561363757613636613286565b5b6000613645858286016132d4565b9250506020613656858286016132d4565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806136a757607f821691505b6020821081036136ba576136b9613660565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006136f66020836131d6565b9150613701826136c0565b602082019050919050565b60006020820190508181036000830152613725816136e9565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613795826132e9565b91506137a0836132e9565b9250826137b0576137af61372c565b5b828204905092915050565b60006137c6826132e9565b91506137d1836132e9565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561380a5761380961375b565b5b828202905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e747360008201527f206c6f776572207468616e20302e352500000000000000000000000000000000602082015250565b60006138716030836131d6565b915061387c82613815565b604082019050919050565b600060208201905081810360008301526138a081613864565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6d616b6572506169727300000000000000000000000000000000000000000000602082015250565b6000613903602a836131d6565b915061390e826138a7565b604082019050919050565b60006020820190508181036000830152613932816138f6565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b60006139956024836131d6565b91506139a082613939565b604082019050919050565b600060208201905081810360008301526139c481613988565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000613a276026836131d6565b9150613a32826139cb565b604082019050919050565b60006020820190508181036000830152613a5681613a1a565b9050919050565b6000613a68826132e9565b9150613a73836132e9565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613aa857613aa761375b565b5b828201905092915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000613ae9601b836131d6565b9150613af482613ab3565b602082019050919050565b60006020820190508181036000830152613b1881613adc565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000613b7b6024836131d6565b9150613b8682613b1f565b604082019050919050565b60006020820190508181036000830152613baa81613b6e565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000613c0d6022836131d6565b9150613c1882613bb1565b604082019050919050565b60006020820190508181036000830152613c3c81613c00565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000613c9f6025836131d6565b9150613caa82613c43565b604082019050919050565b60006020820190508181036000830152613cce81613c92565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000613d316023836131d6565b9150613d3c82613cd5565b604082019050919050565b60006020820190508181036000830152613d6081613d24565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865206445614420616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000613dc36025836131d6565b9150613dce82613d67565b604082019050919050565b60006020820190508181036000830152613df281613db6565b9050919050565b7f45524332303a207472616e7366657220746f207468652064456144206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000613e556023836131d6565b9150613e6082613df9565b604082019050919050565b60006020820190508181036000830152613e8481613e48565b9050919050565b7f596f752068617665206265656e20626c61636b6c69737465642066726f6d207460008201527f72616e73666572696e6720746f6b656e73000000000000000000000000000000602082015250565b6000613ee76031836131d6565b9150613ef282613e8b565b604082019050919050565b60006020820190508181036000830152613f1681613eda565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b6000613f536016836131d6565b9150613f5e82613f1d565b602082019050919050565b60006020820190508181036000830152613f8281613f46565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b6000613fe56035836131d6565b9150613ff082613f89565b604082019050919050565b6000602082019050818103600083015261401481613fd8565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b60006140776036836131d6565b91506140828261401b565b604082019050919050565b600060208201905081810360008301526140a68161406a565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b60006140e36013836131d6565b91506140ee826140ad565b602082019050919050565b60006020820190508181036000830152614112816140d6565b9050919050565b6000614124826132e9565b915061412f836132e9565b9250828210156141425761414161375b565b5b828203905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000815190506141ba816132bd565b92915050565b6000602082840312156141d6576141d5613286565b5b60006141e4848285016141ab565b91505092915050565b6000819050919050565b600061421261420d614208846141ed565b613402565b6132e9565b9050919050565b614222816141f7565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61425d816132ab565b82525050565b600061426f8383614254565b60208301905092915050565b6000602082019050919050565b600061429382614228565b61429d8185614233565b93506142a883614244565b8060005b838110156142d95781516142c08882614263565b97506142cb8361427b565b9250506001810190506142ac565b5085935050505092915050565b600060a0820190506142fb600083018861347c565b6143086020830187614219565b818103604083015261431a8186614288565b90506143296060830185613530565b614336608083018461347c565b9695505050505050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b600061439c6021836131d6565b91506143a782614340565b604082019050919050565b600060208201905081810360008301526143cb8161438f565b905091905056fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122042745f9294248c63fa3b23ae0e942a2ea20e97688813465b5e2566536deb894e64736f6c634300080f0033

Deployed Bytecode

0x6080604052600436106102345760003560e01c8063715018a61161012e578063b8863115116100ab578063e16830a81161006f578063e16830a814610896578063e61f55d3146108bf578063ead3f5f0146108ea578063f2fde38b14610915578063f68912cd1461093e5761023b565b8063b88631151461079f578063c0246668146107ca578063c18bc195146107f3578063cc274b291461081c578063dd62ed3e146108595761023b565b806395d89b41116100f257806395d89b411461069457806396880b17146106bf5780639a7a23d6146106fc578063a457c2d714610725578063a9059cbb146107625761023b565b8063715018a6146105e95780637571336a146106005780638a8c523c146106295780638da5cb5b14610640578063924de9b71461066b5761023b565b8063313ce567116101bc5780634fbee193116101805780634fbee193146104de57806354025bab1461051b57806369401241146105465780636db794371461058357806370a08231146105ac5761023b565b8063313ce567146103f5578063351a964d14610420578063395093511461044b578063470624021461048857806349bd5a5e146104b35761023b565b80631694505e116102035780631694505e1461030e57806318160ddd1461033957806323b872dd146103645780632851a5cf146103a15780632b14ca56146103ca5761023b565b806306fdde0314610240578063095ea7b31461026b57806310d5de53146102a857806311a582c3146102e55761023b565b3661023b57005b600080fd5b34801561024c57600080fd5b50610255610969565b6040516102629190613264565b60405180910390f35b34801561027757600080fd5b50610292600480360381019061028d919061331f565b6109fb565b60405161029f919061337a565b60405180910390f35b3480156102b457600080fd5b506102cf60048036038101906102ca9190613395565b610a19565b6040516102dc919061337a565b60405180910390f35b3480156102f157600080fd5b5061030c600480360381019061030791906133c2565b610a39565b005b34801561031a57600080fd5b50610323610c0c565b6040516103309190613461565b60405180910390f35b34801561034557600080fd5b5061034e610c30565b60405161035b919061348b565b60405180910390f35b34801561037057600080fd5b5061038b600480360381019061038691906134a6565b610c3a565b604051610398919061337a565b60405180910390f35b3480156103ad57600080fd5b506103c860048036038101906103c39190613395565b610d13565b005b3480156103d657600080fd5b506103df610dee565b6040516103ec919061348b565b60405180910390f35b34801561040157600080fd5b5061040a610df4565b6040516104179190613515565b60405180910390f35b34801561042c57600080fd5b50610435610dfd565b604051610442919061337a565b60405180910390f35b34801561045757600080fd5b50610472600480360381019061046d919061331f565b610e10565b60405161047f919061337a565b60405180910390f35b34801561049457600080fd5b5061049d610ec3565b6040516104aa919061348b565b60405180910390f35b3480156104bf57600080fd5b506104c8610ec9565b6040516104d5919061353f565b60405180910390f35b3480156104ea57600080fd5b5061050560048036038101906105009190613395565b610eed565b604051610512919061337a565b60405180910390f35b34801561052757600080fd5b50610530610f43565b60405161053d919061348b565b60405180910390f35b34801561055257600080fd5b5061056d60048036038101906105689190613395565b610f49565b60405161057a919061337a565b60405180910390f35b34801561058f57600080fd5b506105aa60048036038101906105a591906133c2565b610f69565b005b3480156105b857600080fd5b506105d360048036038101906105ce9190613395565b611012565b6040516105e0919061348b565b60405180910390f35b3480156105f557600080fd5b506105fe61105a565b005b34801561060c57600080fd5b5061062760048036038101906106229190613586565b6111b2565b005b34801561063557600080fd5b5061063e6112a4565b005b34801561064c57600080fd5b50610655611373565b604051610662919061353f565b60405180910390f35b34801561067757600080fd5b50610692600480360381019061068d91906135c6565b61139d565b005b3480156106a057600080fd5b506106a9611451565b6040516106b69190613264565b60405180910390f35b3480156106cb57600080fd5b506106e660048036038101906106e19190613395565b6114e3565b6040516106f3919061337a565b60405180910390f35b34801561070857600080fd5b50610723600480360381019061071e9190613586565b611503565b005b34801561073157600080fd5b5061074c6004803603810190610747919061331f565b611683565b604051610759919061337a565b60405180910390f35b34801561076e57600080fd5b506107896004803603810190610784919061331f565b611750565b604051610796919061337a565b60405180910390f35b3480156107ab57600080fd5b506107b461176e565b6040516107c1919061337a565b60405180910390f35b3480156107d657600080fd5b506107f160048036038101906107ec9190613586565b611781565b005b3480156107ff57600080fd5b5061081a600480360381019061081591906135f3565b611873565b005b34801561082857600080fd5b50610843600480360381019061083e91906135f3565b6119a9565b604051610850919061337a565b60405180910390f35b34801561086557600080fd5b50610880600480360381019061087b9190613620565b611a52565b60405161088d919061348b565b60405180910390f35b3480156108a257600080fd5b506108bd60048036038101906108b89190613586565b611ad9565b005b3480156108cb57600080fd5b506108d4611bcb565b6040516108e1919061348b565b60405180910390f35b3480156108f657600080fd5b506108ff611bd1565b60405161090c919061353f565b60405180910390f35b34801561092157600080fd5b5061093c60048036038101906109379190613395565b611bf7565b005b34801561094a57600080fd5b50610953611dbd565b604051610960919061353f565b60405180910390f35b6060600380546109789061368f565b80601f01602080910402602001604051908101604052809291908181526020018280546109a49061368f565b80156109f15780601f106109c6576101008083540402835291602001916109f1565b820191906000526020600020905b8154815290600101906020018083116109d457829003601f168201915b5050505050905090565b6000610a0f610a08611e41565b8484611e49565b6001905092915050565b60126020528060005260406000206000915054906101000a900460ff1681565b610a41611e41565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610ad0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ac79061370c565b60405180910390fd5b611388610adb610c30565b610ae5919061378a565b6103e883610af1610c30565b610afb91906137bb565b610b05919061378a565b1015610b46576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b3d90613887565b60405180910390fd5b611388610b51610c30565b610b5b919061378a565b6103e882610b67610c30565b610b7191906137bb565b610b7b919061378a565b1015610bbc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bb390613887565b60405180910390fd5b6103e882610bc8610c30565b610bd291906137bb565b610bdc919061378a565b6008819055506103e881610bee610c30565b610bf891906137bb565b610c02919061378a565b6009819055505050565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6000600254905090565b6000610c47848484612012565b610d0884610c53611e41565b610d03856040518060600160405280602881526020016143f960289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000610cb9611e41565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612a989092919063ffffffff16565b611e49565b600190509392505050565b610d1b611e41565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610daa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610da19061370c565b60405180910390fd5b80600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600f5481565b60006012905090565b600c60019054906101000a900460ff1681565b6000610eb9610e1d611e41565b84610eb48560016000610e2e611e41565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611de390919063ffffffff16565b611e49565b6001905092915050565b600e5481565b7f000000000000000000000000fd6067d8bca5ec1ad918eb7bc24d6d2babbf0afb81565b6000601160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60105481565b60146020528060005260406000206000915054906101000a900460ff1681565b610f71611e41565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611000576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ff79061370c565b60405180910390fd5b81600e8190555080600f819055505050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611062611e41565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146110f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110e89061370c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6111ba611e41565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611249576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112409061370c565b60405180910390fd5b80601260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6112ac611e41565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461133b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113329061370c565b60405180910390fd5b6001600c60006101000a81548160ff0219169083151502179055506001600c60016101000a81548160ff021916908315150217905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6113a5611e41565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611434576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161142b9061370c565b60405180910390fd5b80600c60016101000a81548160ff02191690831515021790555050565b6060600480546114609061368f565b80601f016020809104026020016040519081016040528092919081815260200182805461148c9061368f565b80156114d95780601f106114ae576101008083540402835291602001916114d9565b820191906000526020600020905b8154815290600101906020018083116114bc57829003601f168201915b5050505050905090565b60136020528060005260406000206000915054906101000a900460ff1681565b61150b611e41565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461159a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115919061370c565b60405180910390fd5b7f000000000000000000000000fd6067d8bca5ec1ad918eb7bc24d6d2babbf0afb73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611628576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161161f90613919565b60405180910390fd5b80601460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6000611746611690611e41565b846117418560405180606001604052806025815260200161442160259139600160006116ba611e41565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612a989092919063ffffffff16565b611e49565b6001905092915050565b600061176461175d611e41565b8484612012565b6001905092915050565b600c60029054906101000a900460ff1681565b611789611e41565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611818576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161180f9061370c565b60405180910390fd5b80601160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b61187b611e41565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461190a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119019061370c565b60405180910390fd5b611388611915610c30565b61191f919061378a565b6103e88261192b610c30565b61193591906137bb565b61193f919061378a565b1015611980576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611977906139ab565b60405180910390fd5b6103e88161198c610c30565b61199691906137bb565b6119a0919061378a565b600a8190555050565b60006119b3611e41565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611a42576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a399061370c565b60405180910390fd5b81600b8190555060019050919050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b611ae1611e41565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611b70576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b679061370c565b60405180910390fd5b80601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60155481565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611bff611e41565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611c8e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c859061370c565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611cfd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cf490613a3d565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000808284611df29190613a5d565b905083811015611e37576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e2e90613aff565b60405180910390fd5b8091505092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611eb8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eaf90613b91565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611f27576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f1e90613c23565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612005919061348b565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612081576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161207890613cb5565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036120f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120e790613d47565b60405180910390fd5b61dead73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612160576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161215790613dd9565b60405180910390fd5b61dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036121d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121c790613e6b565b60405180910390fd5b600d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156122745750600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b6122b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122aa90613efd565b60405180910390fd5b600081036122cc576122c783836000612afc565b612a93565b6122d4611373565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156123425750612312611373565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561235b5750600c60029054906101000a900460ff16155b156126e157600c60009054906101000a900460ff1661245557601160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806124155750601160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612454576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161244b90613f69565b60405180910390fd5b5b601460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156124f85750601260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561254757600854811115612542576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161253990613ffb565b60405180910390fd5b612636565b601460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156125ea5750601260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561263557600954811115612634576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161262b9061408d565b60405180910390fd5b5b5b601360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166126e057600a5461269383611012565b8261269e9190613a5d565b11156126df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126d6906140f9565b60405180910390fd5b5b5b600b546126ed30611012565b101580156127085750600c60029054906101000a900460ff16155b801561275d5750601460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b80156127b35750601160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156127cb5750600c60019054906101000a900460ff165b80156128215750601160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15612865576001600c60026101000a81548160ff021916908315150217905550612849612d8f565b6000600c60026101000a81548160ff0219169083151502179055505b6000600c60029054906101000a900460ff16159050601160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168061291b5750601160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561292557600090505b60008115612a8557601460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16801561298857506000600f54115b156129bc576129b560646129a7600f548661309f90919063ffffffff16565b61311990919063ffffffff16565b9050612a48565b601460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015612a1757506000600e54115b15612a4757612a446064612a36600e548661309f90919063ffffffff16565b61311990919063ffffffff16565b90505b5b6000811115612a8457612a5c853083612afc565b8060106000828254612a6e9190613a5d565b925050819055508083612a819190614119565b92505b5b612a90858585612afc565b50505b505050565b6000838311158290612ae0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ad79190613264565b60405180910390fd5b5060008385612aef9190614119565b9050809150509392505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612b6b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b6290613cb5565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612bda576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bd190613d47565b60405180910390fd5b612be5838383613163565b612c50816040518060600160405280602681526020016143d3602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054612a989092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612ce3816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611de390919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051612d82919061348b565b60405180910390a3505050565b6000612d9a30611012565b90506000811480612dad57506000601054145b15612db8575061309d565b60006010549050816010541115612dcd578190505b612df8307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d83611e49565b6000600367ffffffffffffffff811115612e1557612e1461414d565b5b604051908082528060200260200182016040528015612e435781602001602082028036833780820191505090505b5090503081600081518110612e5b57612e5a61417c565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612f00573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f2491906141c0565b81600181518110612f3857612f3761417c565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681600281518110612fa957612fa861417c565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff16635c11d79583600084600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16426040518663ffffffff1660e01b81526004016130679594939291906142e6565b600060405180830381600087803b15801561308157600080fd5b505af1158015613095573d6000803e3d6000fd5b505050505050505b565b60008083036130b15760009050613113565b600082846130bf91906137bb565b90508284826130ce919061378a565b1461310e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613105906143b2565b60405180910390fd5b809150505b92915050565b600061315b83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613168565b905092915050565b505050565b600080831182906131af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131a69190613264565b60405180910390fd5b50600083856131be919061378a565b9050809150509392505050565b600081519050919050565b600082825260208201905092915050565b60005b838110156132055780820151818401526020810190506131ea565b83811115613214576000848401525b50505050565b6000601f19601f8301169050919050565b6000613236826131cb565b61324081856131d6565b93506132508185602086016131e7565b6132598161321a565b840191505092915050565b6000602082019050818103600083015261327e818461322b565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006132b68261328b565b9050919050565b6132c6816132ab565b81146132d157600080fd5b50565b6000813590506132e3816132bd565b92915050565b6000819050919050565b6132fc816132e9565b811461330757600080fd5b50565b600081359050613319816132f3565b92915050565b6000806040838503121561333657613335613286565b5b6000613344858286016132d4565b92505060206133558582860161330a565b9150509250929050565b60008115159050919050565b6133748161335f565b82525050565b600060208201905061338f600083018461336b565b92915050565b6000602082840312156133ab576133aa613286565b5b60006133b9848285016132d4565b91505092915050565b600080604083850312156133d9576133d8613286565b5b60006133e78582860161330a565b92505060206133f88582860161330a565b9150509250929050565b6000819050919050565b600061342761342261341d8461328b565b613402565b61328b565b9050919050565b60006134398261340c565b9050919050565b600061344b8261342e565b9050919050565b61345b81613440565b82525050565b60006020820190506134766000830184613452565b92915050565b613485816132e9565b82525050565b60006020820190506134a0600083018461347c565b92915050565b6000806000606084860312156134bf576134be613286565b5b60006134cd868287016132d4565b93505060206134de868287016132d4565b92505060406134ef8682870161330a565b9150509250925092565b600060ff82169050919050565b61350f816134f9565b82525050565b600060208201905061352a6000830184613506565b92915050565b613539816132ab565b82525050565b60006020820190506135546000830184613530565b92915050565b6135638161335f565b811461356e57600080fd5b50565b6000813590506135808161355a565b92915050565b6000806040838503121561359d5761359c613286565b5b60006135ab858286016132d4565b92505060206135bc85828601613571565b9150509250929050565b6000602082840312156135dc576135db613286565b5b60006135ea84828501613571565b91505092915050565b60006020828403121561360957613608613286565b5b60006136178482850161330a565b91505092915050565b6000806040838503121561363757613636613286565b5b6000613645858286016132d4565b9250506020613656858286016132d4565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806136a757607f821691505b6020821081036136ba576136b9613660565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006136f66020836131d6565b9150613701826136c0565b602082019050919050565b60006020820190508181036000830152613725816136e9565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613795826132e9565b91506137a0836132e9565b9250826137b0576137af61372c565b5b828204905092915050565b60006137c6826132e9565b91506137d1836132e9565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561380a5761380961375b565b5b828202905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e747360008201527f206c6f776572207468616e20302e352500000000000000000000000000000000602082015250565b60006138716030836131d6565b915061387c82613815565b604082019050919050565b600060208201905081810360008301526138a081613864565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6d616b6572506169727300000000000000000000000000000000000000000000602082015250565b6000613903602a836131d6565b915061390e826138a7565b604082019050919050565b60006020820190508181036000830152613932816138f6565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b60006139956024836131d6565b91506139a082613939565b604082019050919050565b600060208201905081810360008301526139c481613988565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000613a276026836131d6565b9150613a32826139cb565b604082019050919050565b60006020820190508181036000830152613a5681613a1a565b9050919050565b6000613a68826132e9565b9150613a73836132e9565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613aa857613aa761375b565b5b828201905092915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b6000613ae9601b836131d6565b9150613af482613ab3565b602082019050919050565b60006020820190508181036000830152613b1881613adc565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000613b7b6024836131d6565b9150613b8682613b1f565b604082019050919050565b60006020820190508181036000830152613baa81613b6e565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000613c0d6022836131d6565b9150613c1882613bb1565b604082019050919050565b60006020820190508181036000830152613c3c81613c00565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000613c9f6025836131d6565b9150613caa82613c43565b604082019050919050565b60006020820190508181036000830152613cce81613c92565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000613d316023836131d6565b9150613d3c82613cd5565b604082019050919050565b60006020820190508181036000830152613d6081613d24565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865206445614420616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000613dc36025836131d6565b9150613dce82613d67565b604082019050919050565b60006020820190508181036000830152613df281613db6565b9050919050565b7f45524332303a207472616e7366657220746f207468652064456144206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000613e556023836131d6565b9150613e6082613df9565b604082019050919050565b60006020820190508181036000830152613e8481613e48565b9050919050565b7f596f752068617665206265656e20626c61636b6c69737465642066726f6d207460008201527f72616e73666572696e6720746f6b656e73000000000000000000000000000000602082015250565b6000613ee76031836131d6565b9150613ef282613e8b565b604082019050919050565b60006020820190508181036000830152613f1681613eda565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b6000613f536016836131d6565b9150613f5e82613f1d565b602082019050919050565b60006020820190508181036000830152613f8281613f46565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b6000613fe56035836131d6565b9150613ff082613f89565b604082019050919050565b6000602082019050818103600083015261401481613fd8565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b60006140776036836131d6565b91506140828261401b565b604082019050919050565b600060208201905081810360008301526140a68161406a565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b60006140e36013836131d6565b91506140ee826140ad565b602082019050919050565b60006020820190508181036000830152614112816140d6565b9050919050565b6000614124826132e9565b915061412f836132e9565b9250828210156141425761414161375b565b5b828203905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000815190506141ba816132bd565b92915050565b6000602082840312156141d6576141d5613286565b5b60006141e4848285016141ab565b91505092915050565b6000819050919050565b600061421261420d614208846141ed565b613402565b6132e9565b9050919050565b614222816141f7565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61425d816132ab565b82525050565b600061426f8383614254565b60208301905092915050565b6000602082019050919050565b600061429382614228565b61429d8185614233565b93506142a883614244565b8060005b838110156142d95781516142c08882614263565b97506142cb8361427b565b9250506001810190506142ac565b5085935050505092915050565b600060a0820190506142fb600083018861347c565b6143086020830187614219565b818103604083015261431a8186614288565b90506143296060830185613530565b614336608083018461347c565b9695505050505050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b600061439c6021836131d6565b91506143a782614340565b604082019050919050565b600060208201905081810360008301526143cb8161438f565b905091905056fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa264697066735822122042745f9294248c63fa3b23ae0e942a2ea20e97688813465b5e2566536deb894e64736f6c634300080f0033

Deployed Bytecode Sourcemap

31076:9749:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7686:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9994:210;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31906:63;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34617:620;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31154:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8806:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10686:454;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36636:131;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31726:22;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8648:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31553:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11549:300;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31698:21;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31212:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36775:126;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31757:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32192:42;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35720:138;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;8977:177;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22841:148;;;;;;;;;;;;;:::i;:::-;;36183:167;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34245:114;;;;;;;;;;;;;:::i;:::-;;22199:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35610:102;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;7905:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31976:58;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36358:270;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12352:400;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9367:216;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31593:22;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35866:132;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35245:269;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34429:180;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9646:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36006:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36909:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31298:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23144:281;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31259:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7686:100;7740:13;7773:5;7766:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7686:100;:::o;9994:210::-;10113:4;10135:39;10144:12;:10;:12::i;:::-;10158:7;10167:6;10135:8;:39::i;:::-;10192:4;10185:11;;9994:210;;;;:::o;31906:63::-;;;;;;;;;;;;;;;;;;;;;;:::o;34617:620::-;22421:12;:10;:12::i;:::-;22411:22;;:6;;;;;;;;;;;:22;;;22403:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;34836:4:::1;34820:13;:11;:13::i;:::-;:20;;;;:::i;:::-;34810:4;34791:15;34775:13;:11;:13::i;:::-;:31;;;;:::i;:::-;34774:40;;;;:::i;:::-;34773:68;;34751:166;;;;;;;;;;;;:::i;:::-;;;;;;;;;35014:4;34998:13;:11;:13::i;:::-;:20;;;;:::i;:::-;34988:4;34968:16;34952:13;:11;:13::i;:::-;:32;;;;:::i;:::-;34951:41;;;;:::i;:::-;34950:69;;34928:167;;;;;;;;;;;;:::i;:::-;;;;;;;;;35157:4;35138:15;35122:13;:11;:13::i;:::-;:31;;;;:::i;:::-;35121:40;;;;:::i;:::-;35106:12;:55;;;;35225:4;35205:16;35189:13;:11;:13::i;:::-;:32;;;;:::i;:::-;35188:41;;;;:::i;:::-;35172:13;:57;;;;34617:620:::0;;:::o;31154:51::-;;;:::o;8806:108::-;8867:7;8894:12;;8887:19;;8806:108;:::o;10686:454::-;10826:4;10843:36;10853:6;10861:9;10872:6;10843:9;:36::i;:::-;10890:220;10913:6;10934:12;:10;:12::i;:::-;10961:138;11017:6;10961:138;;;;;;;;;;;;;;;;;:11;:19;10973:6;10961:19;;;;;;;;;;;;;;;:33;10981:12;:10;:12::i;:::-;10961:33;;;;;;;;;;;;;;;;:37;;:138;;;;;:::i;:::-;10890:8;:220::i;:::-;11128:4;11121:11;;10686:454;;;;;:::o;36636:131::-;22421:12;:10;:12::i;:::-;22411:22;;:6;;;;;;;;;;;:22;;;22403:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;36739:20:::1;36719:17;;:40;;;;;;;;;;;;;;;;;;36636:131:::0;:::o;31726:22::-;;;;:::o;8648:93::-;8706:5;8731:2;8724:9;;8648:93;:::o;31553:33::-;;;;;;;;;;;;;:::o;11549:300::-;11664:4;11686:133;11709:12;:10;:12::i;:::-;11736:7;11758:50;11797:10;11758:11;:25;11770:12;:10;:12::i;:::-;11758:25;;;;;;;;;;;;;;;:34;11784:7;11758:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;11686:8;:133::i;:::-;11837:4;11830:11;;11549:300;;;;:::o;31698:21::-;;;;:::o;31212:38::-;;;:::o;36775:126::-;36841:4;36865:19;:28;36885:7;36865:28;;;;;;;;;;;;;;;;;;;;;;;;;36858:35;;36775:126;;;:::o;31757:28::-;;;;:::o;32192:42::-;;;;;;;;;;;;;;;;;;;;;;:::o;35720:138::-;22421:12;:10;:12::i;:::-;22411:22;;:6;;;;;;;;;;;:22;;;22403:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;35814:7:::1;35805:6;:16;;;;35842:8;35832:7;:18;;;;35720:138:::0;;:::o;8977:177::-;9096:7;9128:9;:18;9138:7;9128:18;;;;;;;;;;;;;;;;9121:25;;8977:177;;;:::o;22841:148::-;22421:12;:10;:12::i;:::-;22411:22;;:6;;;;;;;;;;;:22;;;22403:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22948:1:::1;22911:40;;22932:6;;;;;;;;;;;22911:40;;;;;;;;;;;;22979:1;22962:6;;:19;;;;;;;;;;;;;;;;;;22841:148::o:0;36183:167::-;22421:12;:10;:12::i;:::-;22411:22;;:6;;;;;;;;;;;:22;;;22403:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;36338:4:::1;36296:31;:39;36328:6;36296:39;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;36183:167:::0;;:::o;34245:114::-;22421:12;:10;:12::i;:::-;22411:22;;:6;;;;;;;;;;;:22;;;22403:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;34316:4:::1;34300:13;;:20;;;;;;;;;;;;;;;;;;34347:4;34331:13;;:20;;;;;;;;;;;;;;;;;;34245:114::o:0;22199:79::-;22237:7;22264:6;;;;;;;;;;;22257:13;;22199:79;:::o;35610:102::-;22421:12;:10;:12::i;:::-;22411:22;;:6;;;;;;;;;;;:22;;;22403:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;35697:7:::1;35681:13;;:23;;;;;;;;;;;;;;;;;;35610:102:::0;:::o;7905:104::-;7961:13;7994:7;7987:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7905:104;:::o;31976:58::-;;;;;;;;;;;;;;;;;;;;;;:::o;36358:270::-;22421:12;:10;:12::i;:::-;22411:22;;:6;;;;;;;;;;;:22;;;22403:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;36502:13:::1;36494:21;;:4;:21;;::::0;36472:113:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;36615:5;36596:10;:16;36607:4;36596:16;;;;;;;;;;;;;;;;:24;;;;;;;;;;;;;;;;;;36358:270:::0;;:::o;12352:400::-;12472:4;12494:228;12517:12;:10;:12::i;:::-;12544:7;12566:145;12623:15;12566:145;;;;;;;;;;;;;;;;;:11;:25;12578:12;:10;:12::i;:::-;12566:25;;;;;;;;;;;;;;;:34;12592:7;12566:34;;;;;;;;;;;;;;;;:38;;:145;;;;;:::i;:::-;12494:8;:228::i;:::-;12740:4;12733:11;;12352:400;;;;:::o;9367:216::-;9489:4;9511:42;9521:12;:10;:12::i;:::-;9535:9;9546:6;9511:9;:42::i;:::-;9571:4;9564:11;;9367:216;;;;:::o;31593:22::-;;;;;;;;;;;;;:::o;35866:132::-;22421:12;:10;:12::i;:::-;22411:22;;:6;;;;;;;;;;;:22;;;22403:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;35982:8:::1;35951:19;:28;35971:7;35951:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;35866:132:::0;;:::o;35245:269::-;22421:12;:10;:12::i;:::-;22411:22;;:6;;;;;;;;;;;:22;;;22403:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;35399:4:::1;35383:13;:11;:13::i;:::-;:20;;;;:::i;:::-;35373:4;35356:13;35340;:11;:13::i;:::-;:29;;;;:::i;:::-;35339:38;;;;:::i;:::-;35338:66;;35329:116;;;;;;;;;;;;:::i;:::-;;;;;;;;;35502:4;35485:13;35469;:11;:13::i;:::-;:29;;;;:::i;:::-;35468:38;;;;:::i;:::-;35456:9;:50;;;;35245:269:::0;:::o;34429:180::-;34532:4;22421:12;:10;:12::i;:::-;22411:22;;:6;;;;;;;;;;;:22;;;22403:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;34570:9:::1;34554:13;:25;;;;34597:4;34590:11;;34429:180:::0;;;:::o;9646:201::-;9780:7;9812:11;:18;9824:5;9812:18;;;;;;;;;;;;;;;:27;9831:7;9812:27;;;;;;;;;;;;;;;;9805:34;;9646:201;;;;:::o;36006:169::-;22421:12;:10;:12::i;:::-;22411:22;;:6;;;;;;;;;;;:22;;;22403:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;36159:8:::1;36121:26;:35;36148:7;36121:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;36006:169:::0;;:::o;36909:25::-;;;;:::o;31298:26::-;;;;;;;;;;;;;:::o;23144:281::-;22421:12;:10;:12::i;:::-;22411:22;;:6;;;;;;;;;;;:22;;;22403:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;23267:1:::1;23247:22;;:8;:22;;::::0;23225:110:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;23380:8;23351:38;;23372:6;;;;;;;;;;;23351:38;;;;;;;;;;;;23409:8;23400:6;;:17;;;;;;;;;;;;;;;;;;23144:281:::0;:::o;31259:32::-;;;;;;;;;;;;;:::o;17121:181::-;17179:7;17199:9;17215:1;17211;:5;;;;:::i;:::-;17199:17;;17240:1;17235;:6;;17227:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;17293:1;17286:8;;;17121:181;;;;:::o;138:98::-;191:7;218:10;211:17;;138:98;:::o;15743:380::-;15896:1;15879:19;;:5;:19;;;15871:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;15977:1;15958:21;;:7;:21;;;15950:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;16061:6;16031:11;:18;16043:5;16031:18;;;;;;;;;;;;;;;:27;16050:7;16031:27;;;;;;;;;;;;;;;:36;;;;16099:7;16083:32;;16092:5;16083:32;;;16108:6;16083:32;;;;;;:::i;:::-;;;;;;;;15743:380;;;:::o;36943:3090::-;37091:1;37075:18;;:4;:18;;;37067:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;37168:1;37154:16;;:2;:16;;;37146:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;37245:6;37229:23;;:4;:23;;;37221:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;37326:6;37312:21;;:2;:21;;;37304:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;37393:10;:14;37404:2;37393:14;;;;;;;;;;;;;;;;;;;;;;;;;37392:15;:36;;;;;37412:10;:16;37423:4;37412:16;;;;;;;;;;;;;;;;;;;;;;;;;37411:17;37392:36;37384:97;;;;;;;;;;;;:::i;:::-;;;;;;;;;37508:1;37498:6;:11;37494:93;;37526:28;37542:4;37548:2;37552:1;37526:15;:28::i;:::-;37569:7;;37494:93;37611:7;:5;:7::i;:::-;37603:15;;:4;:15;;;;:32;;;;;37628:7;:5;:7::i;:::-;37622:13;;:2;:13;;;;37603:32;:47;;;;;37640:10;;;;;;;;;;;37639:11;37603:47;37599:1172;;;37672:13;;;;;;;;;;;37667:203;;37736:19;:25;37756:4;37736:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;37765:19;:23;37785:2;37765:23;;;;;;;;;;;;;;;;;;;;;;;;;37736:52;37706:148;;;;;;;;;;;;:::i;:::-;;;;;;;;;37667:203;37932:10;:16;37943:4;37932:16;;;;;;;;;;;;;;;;;;;;;;;;;:73;;;;;37970:31;:35;38002:2;37970:35;;;;;;;;;;;;;;;;;;;;;;;;;37969:36;37932:73;37910:636;;;38080:12;;38070:6;:22;;38040:149;;;;;;;;;;;;:::i;:::-;;;;;;;;;37910:636;;;38271:10;:14;38282:2;38271:14;;;;;;;;;;;;;;;;;;;;;;;;;:73;;;;;38307:31;:37;38339:4;38307:37;;;;;;;;;;;;;;;;;;;;;;;;;38306:38;38271:73;38249:297;;;38419:13;;38409:6;:23;;38379:151;;;;;;;;;;;;:::i;:::-;;;;;;;;;38249:297;37910:636;38565:26;:30;38592:2;38565:30;;;;;;;;;;;;;;;;;;;;;;;;;38560:200;;38672:9;;38655:13;38665:2;38655:9;:13::i;:::-;38646:6;:22;;;;:::i;:::-;:35;;38616:128;;;;;;;;;;;;:::i;:::-;;;;;;;;;38560:200;37599:1172;38830:13;;38802:24;38820:4;38802:9;:24::i;:::-;:41;;38801:71;;;;;38862:10;;;;;;;;;;;38861:11;38801:71;:102;;;;;38889:10;:14;38900:2;38889:14;;;;;;;;;;;;;;;;;;;;;;;;;38801:102;:145;;;;;38921:19;:25;38941:4;38921:25;;;;;;;;;;;;;;;;;;;;;;;;;38920:26;38801:145;:175;;;;;38963:13;;;;;;;;;;;38801:175;:216;;;;;38994:19;:23;39014:2;38994:23;;;;;;;;;;;;;;;;;;;;;;;;;38993:24;38801:216;38783:351;;;39057:4;39044:10;;:17;;;;;;;;;;;;;;;;;;39076:13;:11;:13::i;:::-;39117:5;39104:10;;:18;;;;;;;;;;;;;;;;;;38783:351;39146:12;39162:10;;;;;;;;;;;39161:11;39146:26;;39274:19;:25;39294:4;39274:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;39303:19;:23;39323:2;39303:23;;;;;;;;;;;;;;;;;;;;;;;;;39274:52;39270:100;;;39353:5;39343:15;;39270:100;39382:12;39487:7;39483:497;;;39541:10;:14;39552:2;39541:14;;;;;;;;;;;;;;;;;;;;;;;;;:29;;;;;39569:1;39559:7;;:11;39541:29;39537:252;;;39598:28;39622:3;39598:19;39609:7;;39598:6;:10;;:19;;;;:::i;:::-;:23;;:28;;;;:::i;:::-;39591:35;;39537:252;;;39688:10;:16;39699:4;39688:16;;;;;;;;;;;;;;;;;;;;;;;;;:30;;;;;39717:1;39708:6;;:10;39688:30;39684:105;;;39746:27;39769:3;39746:18;39757:6;;39746;:10;;:18;;;;:::i;:::-;:22;;:27;;;;:::i;:::-;39739:34;;39684:105;39537:252;39816:1;39809:4;:8;39805:164;;;39838:42;39854:4;39868;39875;39838:15;:42::i;:::-;39916:4;39899:13;;:21;;;;;;;:::i;:::-;;;;;;;;39949:4;39939:14;;;;;:::i;:::-;;;39805:164;39483:497;39992:33;40008:4;40014:2;40018:6;39992:15;:33::i;:::-;37056:2977;;36943:3090;;;;:::o;18024:226::-;18144:7;18177:1;18172;:6;;18180:12;18164:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;18204:9;18220:1;18216;:5;;;;:::i;:::-;18204:17;;18241:1;18234:8;;;18024:226;;;;;:::o;13242:610::-;13400:1;13382:20;;:6;:20;;;13374:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;13484:1;13463:23;;:9;:23;;;13455:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;13539:47;13560:6;13568:9;13579:6;13539:20;:47::i;:::-;13619:108;13655:6;13619:108;;;;;;;;;;;;;;;;;:9;:17;13629:6;13619:17;;;;;;;;;;;;;;;;:21;;:108;;;;;:::i;:::-;13599:9;:17;13609:6;13599:17;;;;;;;;;;;;;;;:128;;;;13761:32;13786:6;13761:9;:20;13771:9;13761:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;13738:9;:20;13748:9;13738:20;;;;;;;;;;;;;;;:55;;;;13826:9;13809:35;;13818:6;13809:35;;;13837:6;13809:35;;;;;;:::i;:::-;;;;;;;;13242:610;;;:::o;40041:781::-;40083:23;40109:24;40127:4;40109:9;:24::i;:::-;40083:50;;40169:1;40150:15;:20;:42;;;;40191:1;40174:13;;:18;40150:42;40146:81;;;40209:7;;;40146:81;40239:15;40257:13;;40239:31;;40301:15;40285:13;;:31;40281:89;;;40343:15;40333:25;;40281:89;40382:58;40399:4;40414:15;40432:7;40382:8;:58::i;:::-;40453:21;40491:1;40477:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40453:40;;40522:4;40504;40509:1;40504:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;40548:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;40538:4;40543:1;40538:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;40591:11;;;;;;;;;;;40581:4;40586:1;40581:7;;;;;;;;:::i;:::-;;;;;;;:21;;;;;;;;;;;40615:15;:69;;;40699:7;40721:1;40737:4;40756:17;;;;;;;;;;;40788:15;40615:199;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40072:750;;;40041:781;:::o;18509:471::-;18567:7;18817:1;18812;:6;18808:47;;18842:1;18835:8;;;;18808:47;18867:9;18883:1;18879;:5;;;;:::i;:::-;18867:17;;18912:1;18907;18903;:5;;;;:::i;:::-;:10;18895:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;18971:1;18964:8;;;18509:471;;;;;:::o;19456:132::-;19514:7;19541:39;19545:1;19548;19541:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;19534:46;;19456:132;;;;:::o;16726:125::-;;;;:::o;20084:312::-;20204:7;20236:1;20232;:5;20239:12;20224:28;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;20263:9;20279:1;20275;:5;;;;:::i;:::-;20263:17;;20387:1;20380:8;;;20084:312;;;;;:::o;7:99:1:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:307::-;355:1;365:113;379:6;376:1;373:13;365:113;;;464:1;459:3;455:11;449:18;445:1;440:3;436:11;429:39;401:2;398:1;394:10;389:15;;365:113;;;496:6;493:1;490:13;487:101;;;576:1;567:6;562:3;558:16;551:27;487:101;336:258;287:307;;;:::o;600:102::-;641:6;692:2;688:7;683:2;676:5;672:14;668:28;658:38;;600:102;;;:::o;708:364::-;796:3;824:39;857:5;824:39;:::i;:::-;879:71;943:6;938:3;879:71;:::i;:::-;872:78;;959:52;1004:6;999:3;992:4;985:5;981:16;959:52;:::i;:::-;1036:29;1058:6;1036:29;:::i;:::-;1031:3;1027:39;1020:46;;800:272;708:364;;;;:::o;1078:313::-;1191:4;1229:2;1218:9;1214:18;1206:26;;1278:9;1272:4;1268:20;1264:1;1253:9;1249:17;1242:47;1306:78;1379:4;1370:6;1306:78;:::i;:::-;1298:86;;1078:313;;;;:::o;1478:117::-;1587:1;1584;1577:12;1724:126;1761:7;1801:42;1794:5;1790:54;1779:65;;1724:126;;;:::o;1856:96::-;1893:7;1922:24;1940:5;1922:24;:::i;:::-;1911:35;;1856:96;;;:::o;1958:122::-;2031:24;2049:5;2031:24;:::i;:::-;2024:5;2021:35;2011:63;;2070:1;2067;2060:12;2011:63;1958:122;:::o;2086:139::-;2132:5;2170:6;2157:20;2148:29;;2186:33;2213:5;2186:33;:::i;:::-;2086:139;;;;:::o;2231:77::-;2268:7;2297:5;2286:16;;2231:77;;;:::o;2314:122::-;2387:24;2405:5;2387:24;:::i;:::-;2380:5;2377:35;2367:63;;2426:1;2423;2416:12;2367:63;2314:122;:::o;2442:139::-;2488:5;2526:6;2513:20;2504:29;;2542:33;2569:5;2542:33;:::i;:::-;2442:139;;;;:::o;2587:474::-;2655:6;2663;2712:2;2700:9;2691:7;2687:23;2683:32;2680:119;;;2718:79;;:::i;:::-;2680:119;2838:1;2863:53;2908:7;2899:6;2888:9;2884:22;2863:53;:::i;:::-;2853:63;;2809:117;2965:2;2991:53;3036:7;3027:6;3016:9;3012:22;2991:53;:::i;:::-;2981:63;;2936:118;2587:474;;;;;:::o;3067:90::-;3101:7;3144:5;3137:13;3130:21;3119:32;;3067:90;;;:::o;3163:109::-;3244:21;3259:5;3244:21;:::i;:::-;3239:3;3232:34;3163:109;;:::o;3278:210::-;3365:4;3403:2;3392:9;3388:18;3380:26;;3416:65;3478:1;3467:9;3463:17;3454:6;3416:65;:::i;:::-;3278:210;;;;:::o;3494:329::-;3553:6;3602:2;3590:9;3581:7;3577:23;3573:32;3570:119;;;3608:79;;:::i;:::-;3570:119;3728:1;3753:53;3798:7;3789:6;3778:9;3774:22;3753:53;:::i;:::-;3743:63;;3699:117;3494:329;;;;:::o;3829:474::-;3897:6;3905;3954:2;3942:9;3933:7;3929:23;3925:32;3922:119;;;3960:79;;:::i;:::-;3922:119;4080:1;4105:53;4150:7;4141:6;4130:9;4126:22;4105:53;:::i;:::-;4095:63;;4051:117;4207:2;4233:53;4278:7;4269:6;4258:9;4254:22;4233:53;:::i;:::-;4223:63;;4178:118;3829:474;;;;;:::o;4309:60::-;4337:3;4358:5;4351:12;;4309:60;;;:::o;4375:142::-;4425:9;4458:53;4476:34;4485:24;4503:5;4485:24;:::i;:::-;4476:34;:::i;:::-;4458:53;:::i;:::-;4445:66;;4375:142;;;:::o;4523:126::-;4573:9;4606:37;4637:5;4606:37;:::i;:::-;4593:50;;4523:126;;;:::o;4655:153::-;4732:9;4765:37;4796:5;4765:37;:::i;:::-;4752:50;;4655:153;;;:::o;4814:185::-;4928:64;4986:5;4928:64;:::i;:::-;4923:3;4916:77;4814:185;;:::o;5005:276::-;5125:4;5163:2;5152:9;5148:18;5140:26;;5176:98;5271:1;5260:9;5256:17;5247:6;5176:98;:::i;:::-;5005:276;;;;:::o;5287:118::-;5374:24;5392:5;5374:24;:::i;:::-;5369:3;5362:37;5287:118;;:::o;5411:222::-;5504:4;5542:2;5531:9;5527:18;5519:26;;5555:71;5623:1;5612:9;5608:17;5599:6;5555:71;:::i;:::-;5411:222;;;;:::o;5639:619::-;5716:6;5724;5732;5781:2;5769:9;5760:7;5756:23;5752:32;5749:119;;;5787:79;;:::i;:::-;5749:119;5907:1;5932:53;5977:7;5968:6;5957:9;5953:22;5932:53;:::i;:::-;5922:63;;5878:117;6034:2;6060:53;6105:7;6096:6;6085:9;6081:22;6060:53;:::i;:::-;6050:63;;6005:118;6162:2;6188:53;6233:7;6224:6;6213:9;6209:22;6188:53;:::i;:::-;6178:63;;6133:118;5639:619;;;;;:::o;6264:86::-;6299:7;6339:4;6332:5;6328:16;6317:27;;6264:86;;;:::o;6356:112::-;6439:22;6455:5;6439:22;:::i;:::-;6434:3;6427:35;6356:112;;:::o;6474:214::-;6563:4;6601:2;6590:9;6586:18;6578:26;;6614:67;6678:1;6667:9;6663:17;6654:6;6614:67;:::i;:::-;6474:214;;;;:::o;6694:118::-;6781:24;6799:5;6781:24;:::i;:::-;6776:3;6769:37;6694:118;;:::o;6818:222::-;6911:4;6949:2;6938:9;6934:18;6926:26;;6962:71;7030:1;7019:9;7015:17;7006:6;6962:71;:::i;:::-;6818:222;;;;:::o;7046:116::-;7116:21;7131:5;7116:21;:::i;:::-;7109:5;7106:32;7096:60;;7152:1;7149;7142:12;7096:60;7046:116;:::o;7168:133::-;7211:5;7249:6;7236:20;7227:29;;7265:30;7289:5;7265:30;:::i;:::-;7168:133;;;;:::o;7307:468::-;7372:6;7380;7429:2;7417:9;7408:7;7404:23;7400:32;7397:119;;;7435:79;;:::i;:::-;7397:119;7555:1;7580:53;7625:7;7616:6;7605:9;7601:22;7580:53;:::i;:::-;7570:63;;7526:117;7682:2;7708:50;7750:7;7741:6;7730:9;7726:22;7708:50;:::i;:::-;7698:60;;7653:115;7307:468;;;;;:::o;7781:323::-;7837:6;7886:2;7874:9;7865:7;7861:23;7857:32;7854:119;;;7892:79;;:::i;:::-;7854:119;8012:1;8037:50;8079:7;8070:6;8059:9;8055:22;8037:50;:::i;:::-;8027:60;;7983:114;7781:323;;;;:::o;8110:329::-;8169:6;8218:2;8206:9;8197:7;8193:23;8189:32;8186:119;;;8224:79;;:::i;:::-;8186:119;8344:1;8369:53;8414:7;8405:6;8394:9;8390:22;8369:53;:::i;:::-;8359:63;;8315:117;8110:329;;;;:::o;8445:474::-;8513:6;8521;8570:2;8558:9;8549:7;8545:23;8541:32;8538:119;;;8576:79;;:::i;:::-;8538:119;8696:1;8721:53;8766:7;8757:6;8746:9;8742:22;8721:53;:::i;:::-;8711:63;;8667:117;8823:2;8849:53;8894:7;8885:6;8874:9;8870:22;8849:53;:::i;:::-;8839:63;;8794:118;8445:474;;;;;:::o;8925:180::-;8973:77;8970:1;8963:88;9070:4;9067:1;9060:15;9094:4;9091:1;9084:15;9111:320;9155:6;9192:1;9186:4;9182:12;9172:22;;9239:1;9233:4;9229:12;9260:18;9250:81;;9316:4;9308:6;9304:17;9294:27;;9250:81;9378:2;9370:6;9367:14;9347:18;9344:38;9341:84;;9397:18;;:::i;:::-;9341:84;9162:269;9111:320;;;:::o;9437:182::-;9577:34;9573:1;9565:6;9561:14;9554:58;9437:182;:::o;9625:366::-;9767:3;9788:67;9852:2;9847:3;9788:67;:::i;:::-;9781:74;;9864:93;9953:3;9864:93;:::i;:::-;9982:2;9977:3;9973:12;9966:19;;9625:366;;;:::o;9997:419::-;10163:4;10201:2;10190:9;10186:18;10178:26;;10250:9;10244:4;10240:20;10236:1;10225:9;10221:17;10214:47;10278:131;10404:4;10278:131;:::i;:::-;10270:139;;9997:419;;;:::o;10422:180::-;10470:77;10467:1;10460:88;10567:4;10564:1;10557:15;10591:4;10588:1;10581:15;10608:180;10656:77;10653:1;10646:88;10753:4;10750:1;10743:15;10777:4;10774:1;10767:15;10794:185;10834:1;10851:20;10869:1;10851:20;:::i;:::-;10846:25;;10885:20;10903:1;10885:20;:::i;:::-;10880:25;;10924:1;10914:35;;10929:18;;:::i;:::-;10914:35;10971:1;10968;10964:9;10959:14;;10794:185;;;;:::o;10985:348::-;11025:7;11048:20;11066:1;11048:20;:::i;:::-;11043:25;;11082:20;11100:1;11082:20;:::i;:::-;11077:25;;11270:1;11202:66;11198:74;11195:1;11192:81;11187:1;11180:9;11173:17;11169:105;11166:131;;;11277:18;;:::i;:::-;11166:131;11325:1;11322;11318:9;11307:20;;10985:348;;;;:::o;11339:235::-;11479:34;11475:1;11467:6;11463:14;11456:58;11548:18;11543:2;11535:6;11531:15;11524:43;11339:235;:::o;11580:366::-;11722:3;11743:67;11807:2;11802:3;11743:67;:::i;:::-;11736:74;;11819:93;11908:3;11819:93;:::i;:::-;11937:2;11932:3;11928:12;11921:19;;11580:366;;;:::o;11952:419::-;12118:4;12156:2;12145:9;12141:18;12133:26;;12205:9;12199:4;12195:20;12191:1;12180:9;12176:17;12169:47;12233:131;12359:4;12233:131;:::i;:::-;12225:139;;11952:419;;;:::o;12377:229::-;12517:34;12513:1;12505:6;12501:14;12494:58;12586:12;12581:2;12573:6;12569:15;12562:37;12377:229;:::o;12612:366::-;12754:3;12775:67;12839:2;12834:3;12775:67;:::i;:::-;12768:74;;12851:93;12940:3;12851:93;:::i;:::-;12969:2;12964:3;12960:12;12953:19;;12612:366;;;:::o;12984:419::-;13150:4;13188:2;13177:9;13173:18;13165:26;;13237:9;13231:4;13227:20;13223:1;13212:9;13208:17;13201:47;13265:131;13391:4;13265:131;:::i;:::-;13257:139;;12984:419;;;:::o;13409:223::-;13549:34;13545:1;13537:6;13533:14;13526:58;13618:6;13613:2;13605:6;13601:15;13594:31;13409:223;:::o;13638:366::-;13780:3;13801:67;13865:2;13860:3;13801:67;:::i;:::-;13794:74;;13877:93;13966:3;13877:93;:::i;:::-;13995:2;13990:3;13986:12;13979:19;;13638:366;;;:::o;14010:419::-;14176:4;14214:2;14203:9;14199:18;14191:26;;14263:9;14257:4;14253:20;14249:1;14238:9;14234:17;14227:47;14291:131;14417:4;14291:131;:::i;:::-;14283:139;;14010:419;;;:::o;14435:225::-;14575:34;14571:1;14563:6;14559:14;14552:58;14644:8;14639:2;14631:6;14627:15;14620:33;14435:225;:::o;14666:366::-;14808:3;14829:67;14893:2;14888:3;14829:67;:::i;:::-;14822:74;;14905:93;14994:3;14905:93;:::i;:::-;15023:2;15018:3;15014:12;15007:19;;14666:366;;;:::o;15038:419::-;15204:4;15242:2;15231:9;15227:18;15219:26;;15291:9;15285:4;15281:20;15277:1;15266:9;15262:17;15255:47;15319:131;15445:4;15319:131;:::i;:::-;15311:139;;15038:419;;;:::o;15463:305::-;15503:3;15522:20;15540:1;15522:20;:::i;:::-;15517:25;;15556:20;15574:1;15556:20;:::i;:::-;15551:25;;15710:1;15642:66;15638:74;15635:1;15632:81;15629:107;;;15716:18;;:::i;:::-;15629:107;15760:1;15757;15753:9;15746:16;;15463:305;;;;:::o;15774:177::-;15914:29;15910:1;15902:6;15898:14;15891:53;15774:177;:::o;15957:366::-;16099:3;16120:67;16184:2;16179:3;16120:67;:::i;:::-;16113:74;;16196:93;16285:3;16196:93;:::i;:::-;16314:2;16309:3;16305:12;16298:19;;15957:366;;;:::o;16329:419::-;16495:4;16533:2;16522:9;16518:18;16510:26;;16582:9;16576:4;16572:20;16568:1;16557:9;16553:17;16546:47;16610:131;16736:4;16610:131;:::i;:::-;16602:139;;16329:419;;;:::o;16754:223::-;16894:34;16890:1;16882:6;16878:14;16871:58;16963:6;16958:2;16950:6;16946:15;16939:31;16754:223;:::o;16983:366::-;17125:3;17146:67;17210:2;17205:3;17146:67;:::i;:::-;17139:74;;17222:93;17311:3;17222:93;:::i;:::-;17340:2;17335:3;17331:12;17324:19;;16983:366;;;:::o;17355:419::-;17521:4;17559:2;17548:9;17544:18;17536:26;;17608:9;17602:4;17598:20;17594:1;17583:9;17579:17;17572:47;17636:131;17762:4;17636:131;:::i;:::-;17628:139;;17355:419;;;:::o;17780:221::-;17920:34;17916:1;17908:6;17904:14;17897:58;17989:4;17984:2;17976:6;17972:15;17965:29;17780:221;:::o;18007:366::-;18149:3;18170:67;18234:2;18229:3;18170:67;:::i;:::-;18163:74;;18246:93;18335:3;18246:93;:::i;:::-;18364:2;18359:3;18355:12;18348:19;;18007:366;;;:::o;18379:419::-;18545:4;18583:2;18572:9;18568:18;18560:26;;18632:9;18626:4;18622:20;18618:1;18607:9;18603:17;18596:47;18660:131;18786:4;18660:131;:::i;:::-;18652:139;;18379:419;;;:::o;18804:224::-;18944:34;18940:1;18932:6;18928:14;18921:58;19013:7;19008:2;19000:6;18996:15;18989:32;18804:224;:::o;19034:366::-;19176:3;19197:67;19261:2;19256:3;19197:67;:::i;:::-;19190:74;;19273:93;19362:3;19273:93;:::i;:::-;19391:2;19386:3;19382:12;19375:19;;19034:366;;;:::o;19406:419::-;19572:4;19610:2;19599:9;19595:18;19587:26;;19659:9;19653:4;19649:20;19645:1;19634:9;19630:17;19623:47;19687:131;19813:4;19687:131;:::i;:::-;19679:139;;19406:419;;;:::o;19831:222::-;19971:34;19967:1;19959:6;19955:14;19948:58;20040:5;20035:2;20027:6;20023:15;20016:30;19831:222;:::o;20059:366::-;20201:3;20222:67;20286:2;20281:3;20222:67;:::i;:::-;20215:74;;20298:93;20387:3;20298:93;:::i;:::-;20416:2;20411:3;20407:12;20400:19;;20059:366;;;:::o;20431:419::-;20597:4;20635:2;20624:9;20620:18;20612:26;;20684:9;20678:4;20674:20;20670:1;20659:9;20655:17;20648:47;20712:131;20838:4;20712:131;:::i;:::-;20704:139;;20431:419;;;:::o;20856:224::-;20996:34;20992:1;20984:6;20980:14;20973:58;21065:7;21060:2;21052:6;21048:15;21041:32;20856:224;:::o;21086:366::-;21228:3;21249:67;21313:2;21308:3;21249:67;:::i;:::-;21242:74;;21325:93;21414:3;21325:93;:::i;:::-;21443:2;21438:3;21434:12;21427:19;;21086:366;;;:::o;21458:419::-;21624:4;21662:2;21651:9;21647:18;21639:26;;21711:9;21705:4;21701:20;21697:1;21686:9;21682:17;21675:47;21739:131;21865:4;21739:131;:::i;:::-;21731:139;;21458:419;;;:::o;21883:222::-;22023:34;22019:1;22011:6;22007:14;22000:58;22092:5;22087:2;22079:6;22075:15;22068:30;21883:222;:::o;22111:366::-;22253:3;22274:67;22338:2;22333:3;22274:67;:::i;:::-;22267:74;;22350:93;22439:3;22350:93;:::i;:::-;22468:2;22463:3;22459:12;22452:19;;22111:366;;;:::o;22483:419::-;22649:4;22687:2;22676:9;22672:18;22664:26;;22736:9;22730:4;22726:20;22722:1;22711:9;22707:17;22700:47;22764:131;22890:4;22764:131;:::i;:::-;22756:139;;22483:419;;;:::o;22908:236::-;23048:34;23044:1;23036:6;23032:14;23025:58;23117:19;23112:2;23104:6;23100:15;23093:44;22908:236;:::o;23150:366::-;23292:3;23313:67;23377:2;23372:3;23313:67;:::i;:::-;23306:74;;23389:93;23478:3;23389:93;:::i;:::-;23507:2;23502:3;23498:12;23491:19;;23150:366;;;:::o;23522:419::-;23688:4;23726:2;23715:9;23711:18;23703:26;;23775:9;23769:4;23765:20;23761:1;23750:9;23746:17;23739:47;23803:131;23929:4;23803:131;:::i;:::-;23795:139;;23522:419;;;:::o;23947:172::-;24087:24;24083:1;24075:6;24071:14;24064:48;23947:172;:::o;24125:366::-;24267:3;24288:67;24352:2;24347:3;24288:67;:::i;:::-;24281:74;;24364:93;24453:3;24364:93;:::i;:::-;24482:2;24477:3;24473:12;24466:19;;24125:366;;;:::o;24497:419::-;24663:4;24701:2;24690:9;24686:18;24678:26;;24750:9;24744:4;24740:20;24736:1;24725:9;24721:17;24714:47;24778:131;24904:4;24778:131;:::i;:::-;24770:139;;24497:419;;;:::o;24922:240::-;25062:34;25058:1;25050:6;25046:14;25039:58;25131:23;25126:2;25118:6;25114:15;25107:48;24922:240;:::o;25168:366::-;25310:3;25331:67;25395:2;25390:3;25331:67;:::i;:::-;25324:74;;25407:93;25496:3;25407:93;:::i;:::-;25525:2;25520:3;25516:12;25509:19;;25168:366;;;:::o;25540:419::-;25706:4;25744:2;25733:9;25729:18;25721:26;;25793:9;25787:4;25783:20;25779:1;25768:9;25764:17;25757:47;25821:131;25947:4;25821:131;:::i;:::-;25813:139;;25540:419;;;:::o;25965:241::-;26105:34;26101:1;26093:6;26089:14;26082:58;26174:24;26169:2;26161:6;26157:15;26150:49;25965:241;:::o;26212:366::-;26354:3;26375:67;26439:2;26434:3;26375:67;:::i;:::-;26368:74;;26451:93;26540:3;26451:93;:::i;:::-;26569:2;26564:3;26560:12;26553:19;;26212:366;;;:::o;26584:419::-;26750:4;26788:2;26777:9;26773:18;26765:26;;26837:9;26831:4;26827:20;26823:1;26812:9;26808:17;26801:47;26865:131;26991:4;26865:131;:::i;:::-;26857:139;;26584:419;;;:::o;27009:169::-;27149:21;27145:1;27137:6;27133:14;27126:45;27009:169;:::o;27184:366::-;27326:3;27347:67;27411:2;27406:3;27347:67;:::i;:::-;27340:74;;27423:93;27512:3;27423:93;:::i;:::-;27541:2;27536:3;27532:12;27525:19;;27184:366;;;:::o;27556:419::-;27722:4;27760:2;27749:9;27745:18;27737:26;;27809:9;27803:4;27799:20;27795:1;27784:9;27780:17;27773:47;27837:131;27963:4;27837:131;:::i;:::-;27829:139;;27556:419;;;:::o;27981:191::-;28021:4;28041:20;28059:1;28041:20;:::i;:::-;28036:25;;28075:20;28093:1;28075:20;:::i;:::-;28070:25;;28114:1;28111;28108:8;28105:34;;;28119:18;;:::i;:::-;28105:34;28164:1;28161;28157:9;28149:17;;27981:191;;;;:::o;28178:180::-;28226:77;28223:1;28216:88;28323:4;28320:1;28313:15;28347:4;28344:1;28337:15;28364:180;28412:77;28409:1;28402:88;28509:4;28506:1;28499:15;28533:4;28530:1;28523:15;28550:143;28607:5;28638:6;28632:13;28623:22;;28654:33;28681:5;28654:33;:::i;:::-;28550:143;;;;:::o;28699:351::-;28769:6;28818:2;28806:9;28797:7;28793:23;28789:32;28786:119;;;28824:79;;:::i;:::-;28786:119;28944:1;28969:64;29025:7;29016:6;29005:9;29001:22;28969:64;:::i;:::-;28959:74;;28915:128;28699:351;;;;:::o;29056:85::-;29101:7;29130:5;29119:16;;29056:85;;;:::o;29147:158::-;29205:9;29238:61;29256:42;29265:32;29291:5;29265:32;:::i;:::-;29256:42;:::i;:::-;29238:61;:::i;:::-;29225:74;;29147:158;;;:::o;29311:147::-;29406:45;29445:5;29406:45;:::i;:::-;29401:3;29394:58;29311:147;;:::o;29464:114::-;29531:6;29565:5;29559:12;29549:22;;29464:114;;;:::o;29584:184::-;29683:11;29717:6;29712:3;29705:19;29757:4;29752:3;29748:14;29733:29;;29584:184;;;;:::o;29774:132::-;29841:4;29864:3;29856:11;;29894:4;29889:3;29885:14;29877:22;;29774:132;;;:::o;29912:108::-;29989:24;30007:5;29989:24;:::i;:::-;29984:3;29977:37;29912:108;;:::o;30026:179::-;30095:10;30116:46;30158:3;30150:6;30116:46;:::i;:::-;30194:4;30189:3;30185:14;30171:28;;30026:179;;;;:::o;30211:113::-;30281:4;30313;30308:3;30304:14;30296:22;;30211:113;;;:::o;30360:732::-;30479:3;30508:54;30556:5;30508:54;:::i;:::-;30578:86;30657:6;30652:3;30578:86;:::i;:::-;30571:93;;30688:56;30738:5;30688:56;:::i;:::-;30767:7;30798:1;30783:284;30808:6;30805:1;30802:13;30783:284;;;30884:6;30878:13;30911:63;30970:3;30955:13;30911:63;:::i;:::-;30904:70;;30997:60;31050:6;30997:60;:::i;:::-;30987:70;;30843:224;30830:1;30827;30823:9;30818:14;;30783:284;;;30787:14;31083:3;31076:10;;30484:608;;;30360:732;;;;:::o;31098:831::-;31361:4;31399:3;31388:9;31384:19;31376:27;;31413:71;31481:1;31470:9;31466:17;31457:6;31413:71;:::i;:::-;31494:80;31570:2;31559:9;31555:18;31546:6;31494:80;:::i;:::-;31621:9;31615:4;31611:20;31606:2;31595:9;31591:18;31584:48;31649:108;31752:4;31743:6;31649:108;:::i;:::-;31641:116;;31767:72;31835:2;31824:9;31820:18;31811:6;31767:72;:::i;:::-;31849:73;31917:3;31906:9;31902:19;31893:6;31849:73;:::i;:::-;31098:831;;;;;;;;:::o;31935:220::-;32075:34;32071:1;32063:6;32059:14;32052:58;32144:3;32139:2;32131:6;32127:15;32120:28;31935:220;:::o;32161:366::-;32303:3;32324:67;32388:2;32383:3;32324:67;:::i;:::-;32317:74;;32400:93;32489:3;32400:93;:::i;:::-;32518:2;32513:3;32509:12;32502:19;;32161:366;;;:::o;32533:419::-;32699:4;32737:2;32726:9;32722:18;32714:26;;32786:9;32780:4;32776:20;32772:1;32761:9;32757:17;32750:47;32814:131;32940:4;32814:131;:::i;:::-;32806:139;;32533:419;;;:::o

Swarm Source

ipfs://42745f9294248c63fa3b23ae0e942a2ea20e97688813465b5e2566536deb894e
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.