ETH Price: $2,640.97 (+0.55%)

Token

BetVerse (BTVS)
 

Overview

Max Total Supply

10,000,000,000 BTVS

Holders

72

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
13,231,658.441443619535425986 BTVS

Value
$0.00
0x6fb3c96cd6f202b7a4d331d91bb720b110d489cd
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:
BetVerse

Compiler Version
v0.8.0+commit.c7dfd78e

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-02-22
*/

// █▄▄ █▀▀ ▀█▀ █░█ █▀▀ █▀█ █▀ █▀▀
// █▄█ ██▄ ░█░ ▀▄▀ ██▄ █▀▄ ▄█ ██▄
// website   : https://www.betverse.finance/
// telegram  : https://t.me/BetVerseEntryPortal
// twitter   : https://twitter.com/BetVerse_
// gitbook   : https://betverse.gitbook.io/betverse/
// email     : [email protected]

/**
 *Submitted for verification at Etherscan.io & Contract Audit on 2022-02-22
 */

// Sources flattened with hardhat v2.4.0 https://hardhat.org

// SPDX-License-Identifier: MIT

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) {
        this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
        return msg.data;
    }
}

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

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

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

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

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

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

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

pragma solidity ^0.8.0;

// CAUTION
// This version of SafeMath should only be used with Solidity 0.8 or later,
// because it relies on the compiler's built in overflow checks.

/**
 * @dev Wrappers over Solidity's arithmetic operations.
 *
 * NOTE: `SafeMath` is no longer needed starting with Solidity 0.8. The compiler
 * now has built in overflow checking.
 */
library SafeMath {
    /**
     * @dev Returns the addition of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function tryAdd(uint256 a, uint256 b)
        internal
        pure
        returns (bool, uint256)
    {
        unchecked {
            uint256 c = a + b;
            if (c < a) return (false, 0);
            return (true, c);
        }
    }

    /**
     * @dev Returns the substraction of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function trySub(uint256 a, uint256 b)
        internal
        pure
        returns (bool, uint256)
    {
        unchecked {
            if (b > a) return (false, 0);
            return (true, a - b);
        }
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function tryMul(uint256 a, uint256 b)
        internal
        pure
        returns (bool, uint256)
    {
        unchecked {
            // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
            // benefit is lost if 'b' is also tested.
            // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
            if (a == 0) return (true, 0);
            uint256 c = a * b;
            if (c / a != b) return (false, 0);
            return (true, c);
        }
    }

    /**
     * @dev Returns the division of two unsigned integers, with a division by zero flag.
     *
     * _Available since v3.4._
     */
    function tryDiv(uint256 a, uint256 b)
        internal
        pure
        returns (bool, uint256)
    {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a / b);
        }
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.
     *
     * _Available since v3.4._
     */
    function tryMod(uint256 a, uint256 b)
        internal
        pure
        returns (bool, uint256)
    {
        unchecked {
            if (b == 0) return (false, 0);
            return (true, a % b);
        }
    }

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

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

    /**
     * @dev Returns the multiplication of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `*` operator.
     *
     * Requirements:
     *
     * - Multiplication cannot overflow.
     */
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        return a * b;
    }

    /**
     * @dev Returns the integer division of two unsigned integers, reverting on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator.
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return a / b;
    }

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

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on
     * overflow (when the result is negative).
     *
     * CAUTION: This function is deprecated because it requires allocating memory for the error
     * message unnecessarily. For custom revert reasons use {trySub}.
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b <= a, errorMessage);
            return a - b;
        }
    }

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

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * reverting with custom message when dividing by zero.
     *
     * CAUTION: This function is deprecated because it requires allocating memory for the error
     * message unnecessarily. For custom revert reasons use {tryMod}.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(
        uint256 a,
        uint256 b,
        string memory errorMessage
    ) internal pure returns (uint256) {
        unchecked {
            require(b > 0, errorMessage);
            return a % b;
        }
    }
}

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

pragma solidity ^0.8.0;

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

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

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

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

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

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

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

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

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

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]

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.zeppelin.solutions/t/how-to-implement-erc20-supply-mechanisms/226[How
 * to implement supply mechanisms].
 *
 * We have followed general OpenZeppelin guidelines: functions revert instead
 * of 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}.
     *
     * The defaut value of {decimals} is 18. To select a different value for
     * {decimals} you should overload it.
     *
     * All two of these values are immutable: they can only be set once during
     * construction.
     */
    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }

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

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

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

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

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

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

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

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

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

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

        return true;
    }

    /**
     * @dev Atomically increases the allowance granted to `spender` by the caller.
     *
     * This is an alternative to {approve} that can be used as a mitigation for
     * problems described in {IERC20-approve}.
     *
     * Emits an {Approval} event indicating the updated allowance.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function increaseAllowance(address spender, uint256 addedValue)
        public
        virtual
        returns (bool)
    {
        _approve(
            _msgSender(),
            spender,
            _allowances[_msgSender()][spender] + 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)
    {
        uint256 currentAllowance = _allowances[_msgSender()][spender];
        require(
            currentAllowance >= subtractedValue,
            "ERC20: decreased allowance below zero"
        );
        _approve(_msgSender(), spender, currentAllowance - subtractedValue);

        return true;
    }

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

        _beforeTokenTransfer(sender, recipient, amount);

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

        emit Transfer(sender, recipient, amount);
    }

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

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

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

    /**
     * @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");
        _balances[account] = accountBalance - amount;
        _totalSupply -= amount;

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

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

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

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

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

pragma solidity ^0.8.0;

/**
 * @dev Collection of functions related to the address type
 */
library Address {
    /**
     * @dev Returns true if `account` is a contract.
     *
     * [IMPORTANT]
     * ====
     * It is unsafe to assume that an address for which this function returns
     * false is an externally-owned account (EOA) and not a contract.
     *
     * Among others, `isContract` will return false for the following
     * types of addresses:
     *
     *  - an externally-owned account
     *  - a contract in construction
     *  - an address where a contract will be created
     *  - an address where a contract lived, but was destroyed
     * ====
     */
    function isContract(address account) internal view returns (bool) {
        // This method relies on extcodesize, which returns 0 for contracts in
        // construction, since the code is only stored at the end of the
        // constructor execution.

        uint256 size;
        // solhint-disable-next-line no-inline-assembly
        assembly {
            size := extcodesize(account)
        }
        return size > 0;
    }

    /**
     * @dev Replacement for Solidity's `transfer`: sends `amount` wei to
     * `recipient`, forwarding all available gas and reverting on errors.
     *
     * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost
     * of certain opcodes, possibly making contracts go over the 2300 gas limit
     * imposed by `transfer`, making them unable to receive funds via
     * `transfer`. {sendValue} removes this limitation.
     *
     * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].
     *
     * IMPORTANT: because control is transferred to `recipient`, care must be
     * taken to not create reentrancy vulnerabilities. Consider using
     * {ReentrancyGuard} or the
     * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].
     */
    function sendValue(address payable recipient, uint256 amount) internal {
        require(
            address(this).balance >= amount,
            "Address: insufficient balance"
        );

        // solhint-disable-next-line avoid-low-level-calls, avoid-call-value
        (bool success, ) = recipient.call{value: amount}("");
        require(
            success,
            "Address: unable to send value, recipient may have reverted"
        );
    }

    /**
     * @dev Performs a Solidity function call using a low level `call`. A
     * plain`call` is an unsafe replacement for a function call: use this
     * function instead.
     *
     * If `target` reverts with a revert reason, it is bubbled up by this
     * function (like regular Solidity function calls).
     *
     * Returns the raw returned data. To convert to the expected return value,
     * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].
     *
     * Requirements:
     *
     * - `target` must be a contract.
     * - calling `target` with `data` must not revert.
     *
     * _Available since v3.1._
     */
    function functionCall(address target, bytes memory data)
        internal
        returns (bytes memory)
    {
        return functionCall(target, data, "Address: low-level call failed");
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with
     * `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        return functionCallWithValue(target, data, 0, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but also transferring `value` wei to `target`.
     *
     * Requirements:
     *
     * - the calling contract must have an ETH balance of at least `value`.
     * - the called Solidity function must be `payable`.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value
    ) internal returns (bytes memory) {
        return
            functionCallWithValue(
                target,
                data,
                value,
                "Address: low-level call with value failed"
            );
    }

    /**
     * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but
     * with `errorMessage` as a fallback revert reason when `target` reverts.
     *
     * _Available since v3.1._
     */
    function functionCallWithValue(
        address target,
        bytes memory data,
        uint256 value,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(
            address(this).balance >= value,
            "Address: insufficient balance for call"
        );
        require(isContract(target), "Address: call to non-contract");

        // solhint-disable-next-line avoid-low-level-calls
        (bool success, bytes memory returndata) = target.call{value: value}(
            data
        );
        return _verifyCallResult(success, returndata, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    function functionStaticCall(address target, bytes memory data)
        internal
        view
        returns (bytes memory)
    {
        return
            functionStaticCall(
                target,
                data,
                "Address: low-level static call failed"
            );
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a static call.
     *
     * _Available since v3.3._
     */
    function functionStaticCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal view returns (bytes memory) {
        require(isContract(target), "Address: static call to non-contract");

        // solhint-disable-next-line avoid-low-level-calls
        (bool success, bytes memory returndata) = target.staticcall(data);
        return _verifyCallResult(success, returndata, errorMessage);
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
    function functionDelegateCall(address target, bytes memory data)
        internal
        returns (bytes memory)
    {
        return
            functionDelegateCall(
                target,
                data,
                "Address: low-level delegate call failed"
            );
    }

    /**
     * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
     * but performing a delegate call.
     *
     * _Available since v3.4._
     */
    function functionDelegateCall(
        address target,
        bytes memory data,
        string memory errorMessage
    ) internal returns (bytes memory) {
        require(isContract(target), "Address: delegate call to non-contract");

        // solhint-disable-next-line avoid-low-level-calls
        (bool success, bytes memory returndata) = target.delegatecall(data);
        return _verifyCallResult(success, returndata, errorMessage);
    }

    function _verifyCallResult(
        bool success,
        bytes memory returndata,
        string memory errorMessage
    ) private pure returns (bytes memory) {
        if (success) {
            return returndata;
        } else {
            // Look for revert reason and bubble it up if present
            if (returndata.length > 0) {
                // The easiest way to bubble the revert reason is using memory via assembly

                // solhint-disable-next-line no-inline-assembly
                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}

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

pragma solidity ^0.8.0;

/**
 * @title SafeERC20
 * @dev Wrappers around ERC20 operations that throw on failure (when the token
 * contract returns false). Tokens that return no value (and instead revert or
 * throw on failure) are also supported, non-reverting calls are assumed to be
 * successful.
 * To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract,
 * which allows you to call the safe operations as `token.safeTransfer(...)`, etc.
 */
library SafeERC20 {
    using Address for address;

    function safeTransfer(
        IERC20 token,
        address to,
        uint256 value
    ) internal {
        _callOptionalReturn(
            token,
            abi.encodeWithSelector(token.transfer.selector, to, value)
        );
    }

    function safeTransferFrom(
        IERC20 token,
        address from,
        address to,
        uint256 value
    ) internal {
        _callOptionalReturn(
            token,
            abi.encodeWithSelector(token.transferFrom.selector, from, to, value)
        );
    }

    /**
     * @dev Deprecated. This function has issues similar to the ones found in
     * {IERC20-approve}, and its usage is discouraged.
     *
     * Whenever possible, use {safeIncreaseAllowance} and
     * {safeDecreaseAllowance} instead.
     */
    function safeApprove(
        IERC20 token,
        address spender,
        uint256 value
    ) internal {
        // safeApprove should only be called when setting an initial allowance,
        // or when resetting it to zero. To increase and decrease it, use
        // 'safeIncreaseAllowance' and 'safeDecreaseAllowance'
        // solhint-disable-next-line max-line-length
        require(
            (value == 0) || (token.allowance(address(this), spender) == 0),
            "SafeERC20: approve from non-zero to non-zero allowance"
        );
        _callOptionalReturn(
            token,
            abi.encodeWithSelector(token.approve.selector, spender, value)
        );
    }

    function safeIncreaseAllowance(
        IERC20 token,
        address spender,
        uint256 value
    ) internal {
        uint256 newAllowance = token.allowance(address(this), spender) + value;
        _callOptionalReturn(
            token,
            abi.encodeWithSelector(
                token.approve.selector,
                spender,
                newAllowance
            )
        );
    }

    function safeDecreaseAllowance(
        IERC20 token,
        address spender,
        uint256 value
    ) internal {
        unchecked {
            uint256 oldAllowance = token.allowance(address(this), spender);
            require(
                oldAllowance >= value,
                "SafeERC20: decreased allowance below zero"
            );
            uint256 newAllowance = oldAllowance - value;
            _callOptionalReturn(
                token,
                abi.encodeWithSelector(
                    token.approve.selector,
                    spender,
                    newAllowance
                )
            );
        }
    }

    /**
     * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement
     * on the return value: the return value is optional (but if data is returned, it must not be false).
     * @param token The token targeted by the call.
     * @param data The call data (encoded using abi.encode or one of its variants).
     */
    function _callOptionalReturn(IERC20 token, bytes memory data) private {
        // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since
        // we're implementing it ourselves. We use {Address.functionCall} to perform this call, which verifies that
        // the target address contains contract code and also asserts for success in the low-level call.

        bytes memory returndata = address(token).functionCall(
            data,
            "SafeERC20: low-level call failed"
        );
        if (returndata.length > 0) {
            // Return data is optional
            // solhint-disable-next-line max-line-length
            require(
                abi.decode(returndata, (bool)),
                "SafeERC20: ERC20 operation did not succeed"
            );
        }
    }
}

// File contracts/interfaces/IUniswapRouter01.sol

pragma solidity >=0.8.0;

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

    function WETH() external pure returns (address);

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

// File contracts/interfaces/IUniswapRouter02.sol

pragma solidity >=0.8.0;

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

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

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

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

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

// File contracts/interfaces/IUniswapV2Factory.sol

pragma solidity >=0.8.0;

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

    function feeTo() external view returns (address);

    function feeToSetter() external view returns (address);

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

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

    function allPairsLength() external view returns (uint256);

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

    function setReflectionFeeTo(address) external;

    function setReflectionFeeToSetter(address) external;
}

pragma solidity >=0.8.0;

contract BetVerse is ERC20("BetVerse", "BTVS"), Ownable {
    using SafeMath for uint256;
    using SafeERC20 for IERC20;

    uint256 public constant MAX_SUPPLY = 10000000000 * 1e18; // 10B max supply

    uint16 private MAX_BP_RATE = 10000;
    uint16 private extraLottoTaxRate = 100;
    uint16 private extraLottoSellTaxRate = 200;
    uint16 private devTaxRate = 300;
    uint16 private devSellTaxRate = 300;
    uint16 private burnTaxRate = 100;
    uint16 private marketingTaxRate = 600;
    uint16 private marketingSellTaxRate = 800;
    uint16 private passiveIncomeRewardTaxRate = 500;
    uint256 public maxTransferAmountRate = 100;
    uint256 public maxWalletBPS = 200;
    uint256 public totalDividends;
    uint256 public increasedDividends;
    uint256 public orgMarketingRate = 600;
    uint256 public orgDevRate = 300;
    uint256 public orgLottoRate = 100;

    uint256 public claimablePeriod = 43200 seconds;

    address public deadAddress = 0x000000000000000000000000000000000000dEaD;

    IUniswapV2Router02 public uniswapRouter;
    // The trading pair
    address public uniswapPair;

    address public marketingWallet = 0x6A94a0bC84Bf5451D77B7EcA76f8f86a79b5F979;
    address public devWallet = 0x8092193FAB239Ced952A5452cDdFA4699a7CAd1b;

    // In swap and withdraw
    bool private _inSwapAndWithdraw;
    // The operator can only update the transfer tax rate
    address private _operator;
    // Automatic swap and liquify enabled
    bool public swapAndWithdrawEnabled = false;

    mapping(address => bool) private _isExcludedFromFee;
    mapping(address => bool) private _isExcludedFromMaxTx;
    mapping(address => bool) private _isExcludedFromMaxWallet;

    mapping (address => bool) private botWallets;
    bool botscantrade = false;

    bool private _tradingOpen = false;

    string public WEBSITE = "https://www.betverse.finance/";
    string public TELEGRAM = "https://t.me/BetVerseEntryPortal";
    string public TWITTER = "https://twitter.com/BetVerse_";

    struct CoinTypeInfo {
        address coinAddress;
        address[] routerPath;
    }

    mapping(address => uint256) public claimed; // claimed amount by user
    mapping(address => uint256) public dividendsWhenClaim; // dividend amount when user are claiming
    mapping(address => uint256) public dividendsClaimableTimestamp; // storing the dividends claimable timestamp

    CoinTypeInfo[] public coins;

    modifier onlyOperator() {
        require(_operator == msg.sender, "!operator");
        _;
    }

    modifier lockTheSwap() {
        _inSwapAndWithdraw = true;
        _;
        _inSwapAndWithdraw = false;
    }

    modifier transferTaxFree() {
        uint16 _extraLottoTaxRate = extraLottoTaxRate;
        uint16 _extraLottoSellTaxRate = extraLottoSellTaxRate;
        uint16 _burnTaxRate = burnTaxRate;
        uint16 _devTaxRate = devTaxRate;
        uint16 _devSellTaxRate = devSellTaxRate;
        uint16 _marketingTaxRate = marketingTaxRate;
        uint16 _marketingSellTaxRate = marketingSellTaxRate;
        uint16 _passiveIncomeRewardTaxRate = passiveIncomeRewardTaxRate;
        extraLottoTaxRate = 0;
        extraLottoSellTaxRate = 0;
        burnTaxRate = 0;
        devTaxRate = 0;
        devSellTaxRate = 0;
        marketingTaxRate = 0;
        marketingSellTaxRate = 0;
        passiveIncomeRewardTaxRate = 0;
        _;
        extraLottoTaxRate = _extraLottoTaxRate;
        extraLottoSellTaxRate = _extraLottoSellTaxRate;
        burnTaxRate = _burnTaxRate;
        devTaxRate = _devTaxRate;
        devSellTaxRate = _devSellTaxRate;
        marketingTaxRate = _marketingTaxRate;
        marketingSellTaxRate = _marketingSellTaxRate;
        passiveIncomeRewardTaxRate = _passiveIncomeRewardTaxRate;
    }

    constructor() {
        _operator = msg.sender;
        _mint(msg.sender, MAX_SUPPLY);

        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(
            0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D
        );
        // Create a uniswap pair for this new token
        uniswapPair = IUniswapV2Factory(_uniswapV2Router.factory()).createPair(
            address(this),
            _uniswapV2Router.WETH()
        );

        // set the rest of the contract variables
        uniswapRouter = _uniswapV2Router;

        _isExcludedFromFee[address(this)] = true;
        _isExcludedFromFee[msg.sender] = true;
        _isExcludedFromMaxTx[address(this)] = true;
        _isExcludedFromMaxTx[msg.sender] = true;
        _isExcludedFromMaxTx[deadAddress] = true;
        _isExcludedFromMaxWallet[address(this)] = true;
        _isExcludedFromMaxWallet[msg.sender] = true;
    }

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

    /// @notice Burns `_amount` token fromo `_from`. Must only be called by the owner.
    function burn(address _from, uint256 _amount) public onlyOwner {
        _burn(_from, _amount);
    }

    function _transfer(
        address _sender,
        address _recepient,
        uint256 _amount
    ) internal override {
        require(
            _tradingOpen ||
                _sender == owner() ||
                _recepient == owner() ||
                _sender == address(uniswapRouter),
            "!tradable"
        );

        if(botWallets[_sender] || botWallets[_recepient]){
            require(botscantrade, "bots arent allowed to trade");
        }

        if (
            swapAndWithdrawEnabled == true &&
            _inSwapAndWithdraw == false &&
            address(uniswapRouter) != address(0) &&
            uniswapPair != address(0) &&
            _sender != uniswapPair &&
            _sender != address(uniswapRouter) &&
            _sender != owner() &&
            _sender != address(this)
        ) {
            swapAndWithdraw();
        }

        uint256 _maxWallet = (totalSupply() * maxWalletBPS) / MAX_BP_RATE;
        uint256 _maxTxAmount = (totalSupply() * maxTransferAmountRate) /
            MAX_BP_RATE;

        require(
            _amount <= _maxTxAmount || _isExcludedFromMaxTx[_sender],
            "TX Limit Exceeded"
        );

        if (
            _sender != owner() &&
            _recepient != address(this) &&
            _recepient != address(deadAddress) &&
            _recepient != uniswapPair
        ) {
            uint256 currentBalance = balanceOf(_recepient);
            require(
                _isExcludedFromMaxWallet[_recepient] ||
                    (currentBalance + _amount <= _maxWallet),
                "Max Wallet Limit Exceeded"
            );
        }

        if (_isExcludedFromFee[_sender]) {
            super._transfer(_sender, _recepient, _amount);
        } else {
            uint256 extraLottoFee = _amount.mul(extraLottoTaxRate).div(
                MAX_BP_RATE
            );
            uint256 extraLottoSellFee = _amount.mul(extraLottoSellTaxRate).div(
                MAX_BP_RATE
            );
            uint256 burnFee = _amount.mul(burnTaxRate).div(MAX_BP_RATE);
            uint256 devFee = _amount.mul(devTaxRate).div(MAX_BP_RATE);
            uint256 devSellFee = _amount.mul(devSellTaxRate).div(MAX_BP_RATE);
            uint256 marketingFee = _amount.mul(marketingTaxRate).div(
                MAX_BP_RATE
            );
            uint256 marketingSellFee = _amount.mul(marketingSellTaxRate).div(
                MAX_BP_RATE
            );
            uint256 passiveIncomeRewardFee = _amount
                .mul(passiveIncomeRewardTaxRate)
                .div(MAX_BP_RATE);

            uint256 sellTotalFee = extraLottoSellFee +
                burnFee +
                devSellFee +
                marketingSellFee +
                passiveIncomeRewardFee;
            uint256 buyTotalFee = extraLottoFee +
                burnFee +
                devFee +
                marketingFee +
                passiveIncomeRewardFee;

            if (uniswapPair == _recepient) {
                if (_amount == balanceOf(_sender)){
                    setClaimableTimestamp(_sender, 0);
                }
                _amount = _amount.sub(sellTotalFee);
                super._transfer(_sender, _recepient, _amount);
                super._transfer(_sender, address(this), extraLottoSellFee);
                super._transfer(_sender, deadAddress, burnFee);
                super._transfer(_sender, address(this), devSellFee);
                super._transfer(_sender, address(this), marketingSellFee);
                super._transfer(_sender, address(this), passiveIncomeRewardFee);
            } else {
                _amount = _amount.sub(buyTotalFee);
                super._transfer(_sender, _recepient, _amount);
                super._transfer(_sender, address(this), extraLottoFee);
                super._transfer(_sender, deadAddress, burnFee);
                super._transfer(_sender, address(this), devFee);
                super._transfer(_sender, address(this), marketingFee);
                super._transfer(_sender, address(this), passiveIncomeRewardFee);

                if (claimableTimestamp(_recepient) == 0) {
                    setClaimableTimestamp(_recepient, block.timestamp.add(claimablePeriod));
                }
            }
            totalDividends = totalDividends.add(passiveIncomeRewardFee);
            increasedDividends = increasedDividends.add(passiveIncomeRewardFee);
        }
    }

    function setClaimableTimestamp(address addr, uint256 timestamp)
        internal
    {
        dividendsClaimableTimestamp[addr] = timestamp;
    }


    function claimableTimestamp(address addr)
        public
        view
        returns (uint256)
    { 
        return dividendsClaimableTimestamp[addr];
    }

    /**
     * @dev Transfers operator of the contract to a new account (`newOperator`).
     * Can only be called by the current operator.
     */
    function transferOperator(address newOperator) public onlyOperator {
        require(newOperator != address(0));
        _operator = newOperator;
    }

    /**
     * @dev Update the swap router.
     * Can only be called by the current operator.
     */
    function updateUniswapRouter(address _router) public onlyOwner {
        uniswapRouter = IUniswapV2Router02(_router);
        uniswapPair = IUniswapV2Factory(uniswapRouter.factory()).getPair(
            address(this),
            uniswapRouter.WETH()
        );
        require(uniswapPair != address(0));
    }

    /**
     * @dev Update the swapAndWithdrawEnabled.
     * Can only be called by the current operator.
     */
    function updateSwapAndLiquifyEnabled(bool _enabled) public onlyOperator {
        swapAndWithdrawEnabled = _enabled;
    }

    function manualSwap() external onlyOperator {
        swapAndWithdraw();
    }

    function manualWithdraw() external onlyOperator {
        uint256 totalPercentage = devTaxRate +
            marketingTaxRate +
            extraLottoTaxRate;
        uint256 bal = address(this).balance;
        uint256 balForMarketing = bal.mul(orgMarketingRate).div(
            totalPercentage
        );
        uint256 balFordev = bal.mul(orgDevRate).div(totalPercentage);
        uint256 balForExtraLotto = bal.mul(orgLottoRate).div(totalPercentage);
        payable(marketingWallet).transfer(balForMarketing + balForExtraLotto);
        payable(devWallet).transfer(balFordev);
    }

    /// @dev Swap and liquify
    function swapAndWithdraw() private lockTheSwap transferTaxFree {
        uint256 contractTokenBalance = balanceOf(address(this));
        uint256 totalPercentage = orgMarketingRate + orgDevRate + orgLottoRate;
        if (contractTokenBalance > totalDividends) {
            contractTokenBalance = contractTokenBalance.sub(totalDividends);
            // swap tokens for ETH
            swapTokensForEth(contractTokenBalance);

            uint256 bal = address(this).balance;
            uint256 balForMarketing = bal.mul(orgMarketingRate).div(
                totalPercentage
            );
            uint256 balFordev = bal.mul(orgDevRate).div(totalPercentage);
            uint256 balForExtraLotto = bal.mul(orgLottoRate).div(
                totalPercentage
            );
            payable(marketingWallet).transfer(balForMarketing + balForExtraLotto);
            payable(devWallet).transfer(balFordev);
        }
    }

    /// @dev Swap tokens for eth
    function swapTokensForEth(uint256 tokenAmount) private {
        // generate the pantherSwap pair path of token -> weth
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapRouter.WETH();

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

        // make the swap
        uniswapRouter.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // accept any amount of ETH
            path,
            address(this),
            block.timestamp + 1 days
        );
    }

    function updateFees(
        uint16 _passiveIncomeRate,
        uint16 _extraLottoTaxRate,
        uint16 _extraLottoSellTaxRate,
        uint16 _burnTaxRate,
        uint16 _devTaxRate,
        uint16 _devSellTaxRate,
        uint16 _marketingTaxRate,
        uint16 _marketingSellTaxRate
    ) external onlyOwner {
        require(
            _passiveIncomeRate + _devTaxRate + _marketingTaxRate <= MAX_BP_RATE,
            "!values"
        );
        passiveIncomeRewardTaxRate = _passiveIncomeRate;
        extraLottoTaxRate = _extraLottoTaxRate;
        extraLottoSellTaxRate = _extraLottoSellTaxRate;
        burnTaxRate = _burnTaxRate;
        devTaxRate = _devTaxRate;
        devSellTaxRate = _devSellTaxRate;
        marketingTaxRate = _marketingTaxRate;
        marketingSellTaxRate = _marketingSellTaxRate;
    }

    function updateIncentiveFees() external onlyOperator {
        passiveIncomeRewardTaxRate = 300;
        extraLottoTaxRate = 100;
        extraLottoSellTaxRate = 200;
        burnTaxRate = 100;
        devTaxRate = 200;
        devSellTaxRate = 300;
        marketingTaxRate = 400;
        marketingSellTaxRate = 600;
    }

    function updateIncentiveTxMaxWalletAmount() external onlyOperator {
        maxTransferAmountRate = 400;
        maxWalletBPS = 400;
    }

     function updateIncentiveSuperTxAmount() external onlyOperator {
        maxTransferAmountRate = 10000;
        maxWalletBPS = 10000;
    }

    function setMaxTransferAmountRate(uint16 _maxTransferAmountRate)
        external
        onlyOwner
    {
        require(_maxTransferAmountRate <= MAX_BP_RATE);
        maxTransferAmountRate = _maxTransferAmountRate;
    }

    function openTrading() external onlyOwner {
        _tradingOpen = true;
        swapAndWithdrawEnabled = true;
    }

    function addBotWallet(address botwallet) external onlyOwner() {
        botWallets[botwallet] = true;
    }
    
    function removeBotWallet(address botwallet) external onlyOwner() {
        botWallets[botwallet] = false;
    }
    
    function getBotWalletStatus(address botwallet) public view returns (bool) {
        return botWallets[botwallet];
    }

    function isExcludedFromFee(address _addr) external view returns (bool) {
        return _isExcludedFromFee[_addr];
    }

    function setClaimablePeriod(uint256 _period) external onlyOperator {
        claimablePeriod = _period;
    }

    function excludeFromFee(address _addr, bool _is) external onlyOperator {
        _isExcludedFromFee[_addr] = _is;
    }

    function isExcludedFromMaxTx(address _addr) external view returns (bool) {
        return _isExcludedFromMaxTx[_addr];
    }

    function excludeFromMaxTx(address _addr, bool _is) external onlyOperator {
        _isExcludedFromMaxTx[_addr] = _is;
    }

    function excludeFromMaxWallet(address account, bool excluded)
        public
        onlyOperator
    {
        _isExcludedFromMaxWallet[account] = excluded;
    }

    function isExcludedFromMaxWallet(address account)
        public
        view
        returns (bool)
    {
        return _isExcludedFromMaxWallet[account];
    }

    function setMaxWalletBPS(uint256 bps) external onlyOwner {
        require(
            bps >= 175 && bps <= 10000,
            "BPS must be between 175 and 10000"
        );
        maxWalletBPS = bps;
    }

    function withdrawDividends(uint16 _cId) external {
        require(
            dividendsClaimableTimestamp[msg.sender] <= block.timestamp,
            "withdraw timestamp : not good"
        );
        if (totalDividends <= balanceOf(address(this))) {
            uint256 withdrawable = withdrawableDividends(msg.sender);
            require(withdrawable > 0, "not enough to claim");
            CoinTypeInfo storage coin = coins[_cId];
            if (_cId == 0) {
                // if withdrawing token, reinvest
                transfer(msg.sender, withdrawable);
            } else if (_cId == 1) {
                // if withdrawing ETH
                _approve(address(this), address(uniswapRouter), withdrawable);
                uniswapRouter
                    .swapExactTokensForETHSupportingFeeOnTransferTokens(
                        withdrawable,
                        0,
                        coin.routerPath,
                        msg.sender,
                        block.timestamp.add(300)
                    );
            } else {
                // if withdrawing other coins
                _approve(address(this), address(uniswapRouter), withdrawable);
                uniswapRouter
                    .swapExactTokensForTokensSupportingFeeOnTransferTokens(
                        withdrawable,
                        0,
                        coin.routerPath,
                        msg.sender,
                        block.timestamp.add(300)
                    );
            }
            claimed[msg.sender] = claimed[msg.sender].add(withdrawable);
            dividendsWhenClaim[msg.sender] = increasedDividends;
            totalDividends = totalDividends.sub(withdrawable);
            dividendsClaimableTimestamp[msg.sender] = block.timestamp.add(claimablePeriod);
        }
    }

    function withdrawableDividends(address _user)
        public
        view
        returns (uint256)
    {
        uint256 holdingAmount = balanceOf(_user);
        uint256 soldAmount = tokenAmountSold();
        if (soldAmount == 0) {
            return 0;
        }

        uint256 availableAmount = increasedDividends.sub(
            dividendsWhenClaim[_user]
        );

        if (availableAmount > 0) {
            uint256 brut = availableAmount.mul(holdingAmount).div(soldAmount);

            if (brut > totalDividends) {
                return totalDividends;
            } else {
                return brut;
            }
        }
        return 0;
    }

    function tokenAmountSold() private view returns (uint256) {
        uint256 tokenBalanceInLp = balanceOf(uniswapPair);
        uint256 soldAmount = totalSupply().sub(tokenBalanceInLp);
        return soldAmount;
    }

    function addCoinInfo(address[] memory _path, address _coinAddr)
        external
        onlyOperator
    {
        coins.push(CoinTypeInfo({coinAddress: _coinAddr, routerPath: _path}));
    }

    function updateCoinInfo(
        uint8 _cId,
        address[] memory _path,
        address _coinAddr
    ) external onlyOperator {
        CoinTypeInfo storage coin = coins[_cId];
        coin.routerPath = _path;
        coin.coinAddress = _coinAddr;
    }

    mapping(address => address) internal _delegates;

    /// @notice A checkpoint for marking number of votes from a given block
    struct Checkpoint {
        uint32 fromBlock;
        uint256 votes;
    }

    /// @notice A record of votes checkpoints for each account, by index
    mapping(address => mapping(uint32 => Checkpoint)) public checkpoints;

    /// @notice The number of checkpoints for each account
    mapping(address => uint32) public numCheckpoints;

    /// @notice The EIP-712 typehash for the contract's domain
    bytes32 public constant DOMAIN_TYPEHASH =
        keccak256(
            "EIP712Domain(string name,uint256 chainId,address verifyingContract)"
        );

    /// @notice The EIP-712 typehash for the delegation struct used by the contract
    bytes32 public constant DELEGATION_TYPEHASH =
        keccak256("Delegation(address delegatee,uint256 nonce,uint256 expiry)");

    /// @notice A record of states for signing / validating signatures
    mapping(address => uint256) public nonces;

    /// @notice An event thats emitted when an account changes its delegate
    event DelegateChanged(
        address indexed delegator,
        address indexed fromDelegate,
        address indexed toDelegate
    );

    /// @notice An event thats emitted when a delegate account's vote balance changes
    event DelegateVotesChanged(
        address indexed delegate,
        uint256 previousBalance,
        uint256 newBalance
    );

    /**
     * @notice Delegate votes from `msg.sender` to `delegatee`
     * @param delegator The address to get delegatee for
     */
    function delegates(address delegator) external view returns (address) {
        return _delegates[delegator];
    }

    /**
     * @notice Delegate votes from `msg.sender` to `delegatee`
     * @param delegatee The address to delegate votes to
     */
    function delegate(address delegatee) external {
        return _delegate(msg.sender, delegatee);
    }

    /**
     * @notice Delegates votes from signatory to `delegatee`
     * @param delegatee The address to delegate votes to
     * @param nonce The contract state required to match the signature
     * @param expiry The time at which to expire the signature
     * @param v The recovery byte of the signature
     * @param r Half of the ECDSA signature pair
     * @param s Half of the ECDSA signature pair
     */
    function delegateBySig(
        address delegatee,
        uint256 nonce,
        uint256 expiry,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) external {
        bytes32 domainSeparator = keccak256(
            abi.encode(
                DOMAIN_TYPEHASH,
                keccak256(bytes(name())),
                getChainId(),
                address(this)
            )
        );

        bytes32 structHash = keccak256(
            abi.encode(DELEGATION_TYPEHASH, delegatee, nonce, expiry)
        );

        bytes32 digest = keccak256(
            abi.encodePacked("\x19\x01", domainSeparator, structHash)
        );

        address signatory = ecrecover(digest, v, r, s);
        require(
            signatory != address(0),
            "VERSE::delegateBySig: invalid signature"
        );
        require(
            nonce == nonces[signatory]++,
            "VERSE::delegateBySig: invalid nonce"
        );
        require(
            block.timestamp <= expiry,
            "VERSE::delegateBySig: signature expired"
        );
        return _delegate(signatory, delegatee);
    }

    /**
     * @notice Gets the current votes balance for `account`
     * @param account The address to get votes balance
     * @return The number of current votes for `account`
     */
    function getCurrentVotes(address account) external view returns (uint256) {
        uint32 nCheckpoints = numCheckpoints[account];
        return
            nCheckpoints > 0 ? checkpoints[account][nCheckpoints - 1].votes : 0;
    }

    /**
     * @notice Determine the prior number of votes for an account as of a block number
     * @dev Block number must be a finalized block or else this function will revert to prevent misinformation.
     * @param account The address of the account to check
     * @param blockNumber The block number to get the vote balance at
     * @return The number of votes the account had as of the given block
     */
    function getPriorVotes(address account, uint256 blockNumber)
        external
        view
        returns (uint256)
    {
        require(
            blockNumber < block.number,
            "BETVERSE::getPriorVotes: not yet determined"
        );

        uint32 nCheckpoints = numCheckpoints[account];
        if (nCheckpoints == 0) {
            return 0;
        }

        // First check most recent balance
        if (checkpoints[account][nCheckpoints - 1].fromBlock <= blockNumber) {
            return checkpoints[account][nCheckpoints - 1].votes;
        }

        // Next check implicit zero balance
        if (checkpoints[account][0].fromBlock > blockNumber) {
            return 0;
        }

        uint32 lower = 0;
        uint32 upper = nCheckpoints - 1;
        while (upper > lower) {
            uint32 center = upper - (upper - lower) / 2; // ceil, avoiding overflow
            Checkpoint memory cp = checkpoints[account][center];
            if (cp.fromBlock == blockNumber) {
                return cp.votes;
            } else if (cp.fromBlock < blockNumber) {
                lower = center;
            } else {
                upper = center - 1;
            }
        }
        return checkpoints[account][lower].votes;
    }

    function _delegate(address delegator, address delegatee) internal {
        address currentDelegate = _delegates[delegator];
        uint256 delegatorBalance = balanceOf(delegator); // balance of underlying verse (not scaled);
        _delegates[delegator] = delegatee;

        emit DelegateChanged(delegator, currentDelegate, delegatee);

        _moveDelegates(currentDelegate, delegatee, delegatorBalance);
    }

    function _moveDelegates(
        address srcRep,
        address dstRep,
        uint256 amount
    ) internal {
        if (srcRep != dstRep && amount > 0) {
            if (srcRep != address(0)) {
                // decrease old representative
                uint32 srcRepNum = numCheckpoints[srcRep];
                uint256 srcRepOld = srcRepNum > 0
                    ? checkpoints[srcRep][srcRepNum - 1].votes
                    : 0;
                uint256 srcRepNew = srcRepOld.sub(amount);
                _writeCheckpoint(srcRep, srcRepNum, srcRepOld, srcRepNew);
            }

            if (dstRep != address(0)) {
                // increase new representative
                uint32 dstRepNum = numCheckpoints[dstRep];
                uint256 dstRepOld = dstRepNum > 0
                    ? checkpoints[dstRep][dstRepNum - 1].votes
                    : 0;
                uint256 dstRepNew = dstRepOld.add(amount);
                _writeCheckpoint(dstRep, dstRepNum, dstRepOld, dstRepNew);
            }
        }
    }

    function _writeCheckpoint(
        address delegatee,
        uint32 nCheckpoints,
        uint256 oldVotes,
        uint256 newVotes
    ) internal {
        uint32 blockNumber = safe32(
            block.number,
            "VERSE::_writeCheckpoint: block number exceeds 32 bits"
        );

        if (
            nCheckpoints > 0 &&
            checkpoints[delegatee][nCheckpoints - 1].fromBlock == blockNumber
        ) {
            checkpoints[delegatee][nCheckpoints - 1].votes = newVotes;
        } else {
            checkpoints[delegatee][nCheckpoints] = Checkpoint(
                blockNumber,
                newVotes
            );
            numCheckpoints[delegatee] = nCheckpoints + 1;
        }

        emit DelegateVotesChanged(delegatee, oldVotes, newVotes);
    }

    function safe32(uint256 n, string memory errorMessage)
        internal
        pure
        returns (uint32)
    {
        require(n < 2**32, errorMessage);
        return uint32(n);
    }

    function getChainId() internal view returns (uint256) {
        uint256 chainId;
        assembly {
            chainId := chainid()
        }
        return chainId;
    }

    receive() external payable {}
}

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":"delegator","type":"address"},{"indexed":true,"internalType":"address","name":"fromDelegate","type":"address"},{"indexed":true,"internalType":"address","name":"toDelegate","type":"address"}],"name":"DelegateChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"delegate","type":"address"},{"indexed":false,"internalType":"uint256","name":"previousBalance","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newBalance","type":"uint256"}],"name":"DelegateVotesChanged","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":"DELEGATION_TYPEHASH","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"DOMAIN_TYPEHASH","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_SUPPLY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"TELEGRAM","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"TWITTER","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"WEBSITE","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"botwallet","type":"address"}],"name":"addBotWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_path","type":"address[]"},{"internalType":"address","name":"_coinAddr","type":"address"}],"name":"addCoinInfo","outputs":[],"stateMutability":"nonpayable","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":[{"internalType":"address","name":"_from","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint32","name":"","type":"uint32"}],"name":"checkpoints","outputs":[{"internalType":"uint32","name":"fromBlock","type":"uint32"},{"internalType":"uint256","name":"votes","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"claimablePeriod","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"claimableTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"claimed","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"coins","outputs":[{"internalType":"address","name":"coinAddress","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deadAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"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":"delegatee","type":"address"}],"name":"delegate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"delegatee","type":"address"},{"internalType":"uint256","name":"nonce","type":"uint256"},{"internalType":"uint256","name":"expiry","type":"uint256"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"delegateBySig","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"delegator","type":"address"}],"name":"delegates","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"devWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"dividendsClaimableTimestamp","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"dividendsWhenClaim","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_addr","type":"address"},{"internalType":"bool","name":"_is","type":"bool"}],"name":"excludeFromFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_addr","type":"address"},{"internalType":"bool","name":"_is","type":"bool"}],"name":"excludeFromMaxTx","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromMaxWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"botwallet","type":"address"}],"name":"getBotWalletStatus","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"getCurrentVotes","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"blockNumber","type":"uint256"}],"name":"getPriorVotes","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"increasedDividends","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_addr","type":"address"}],"name":"isExcludedFromFee","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_addr","type":"address"}],"name":"isExcludedFromMaxTx","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromMaxWallet","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"manualSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"manualWithdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransferAmountRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWalletBPS","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"nonces","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"numCheckpoints","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"openTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"operator","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"orgDevRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"orgLottoRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"orgMarketingRate","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"botwallet","type":"address"}],"name":"removeBotWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_period","type":"uint256"}],"name":"setClaimablePeriod","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"_maxTransferAmountRate","type":"uint16"}],"name":"setMaxTransferAmountRate","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"bps","type":"uint256"}],"name":"setMaxWalletBPS","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapAndWithdrawEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalDividends","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOperator","type":"address"}],"name":"transferOperator","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapRouter","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint8","name":"_cId","type":"uint8"},{"internalType":"address[]","name":"_path","type":"address[]"},{"internalType":"address","name":"_coinAddr","type":"address"}],"name":"updateCoinInfo","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"_passiveIncomeRate","type":"uint16"},{"internalType":"uint16","name":"_extraLottoTaxRate","type":"uint16"},{"internalType":"uint16","name":"_extraLottoSellTaxRate","type":"uint16"},{"internalType":"uint16","name":"_burnTaxRate","type":"uint16"},{"internalType":"uint16","name":"_devTaxRate","type":"uint16"},{"internalType":"uint16","name":"_devSellTaxRate","type":"uint16"},{"internalType":"uint16","name":"_marketingTaxRate","type":"uint16"},{"internalType":"uint16","name":"_marketingSellTaxRate","type":"uint16"}],"name":"updateFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"updateIncentiveFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"updateIncentiveSuperTxAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"updateIncentiveTxMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"updateSwapAndLiquifyEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_router","type":"address"}],"name":"updateUniswapRouter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"_cId","type":"uint16"}],"name":"withdrawDividends","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"}],"name":"withdrawableDividends","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

6005805461ffff60a01b191661027160a41b1761ffff60b01b1916601960b21b1761ffff60c01b1916601960c31b1761ffff60d01b1916604b60d21b1761ffff60e01b1916604b60e21b176001600160f01b0316601960f21b1790556006805461025861ffff19918216811763ffff0000191663032000001761ffff60201b19166501f400000000179092556064600781905560c8600855600b9290925561012c600c55600d9190915561a8c0600e55600f805461dead6001600160a01b03199182161790915560128054736a94a0bc84bf5451d77b7eca76f8f86a79b5f97990831617905560138054738092193fab239ced952a5452cddfa4699a7cad1b92169190911790556014805460ff60a01b1916905560198054909116905560c0604052601d60808190527f68747470733a2f2f7777772e62657476657273652e66696e616e63652f00000060a09081526200015d91601a91906200060b565b506040805180820190915260208082527f68747470733a2f2f742e6d652f4265745665727365456e747279506f7274616c918101918252620001a291601b916200060b565b5060408051808201909152601d8082527f68747470733a2f2f747769747465722e636f6d2f42657456657273655f0000006020909201918252620001e991601c916200060b565b50348015620001f757600080fd5b506040805180820182526008815267426574566572736560c01b6020808301918252835180850190945260048452634254565360e01b90840152815191929162000244916003916200060b565b5080516200025a9060049060208401906200060b565b50505060006200026f6200052e60201b60201c565b600580546001600160a01b0319166001600160a01b038316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350601480546001600160a01b03191633908117909155620002ea906b204fce5e3e2502611000000062000532565b6000737a250d5630b4cf539739df2c5dacb4c659f2488d9050806001600160a01b031663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156200033d57600080fd5b505afa15801562000352573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003789190620006b1565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015620003c157600080fd5b505afa158015620003d6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003fc9190620006b1565b6040518363ffffffff1660e01b81526004016200041b929190620006e1565b602060405180830381600087803b1580156200043657600080fd5b505af11580156200044b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620004719190620006b1565b601180546001600160a01b03199081166001600160a01b03938416179091556010805490911692821692909217909155306000818152601560209081526040808320805460ff1990811660019081179092553380865283862080548316841790558686526016855283862080548316841790558086528386208054831684179055600f549097168552828520805482168317905594845260179092528083208054851683179055938252929020805490911690911790556200079d565b3390565b6001600160a01b038216620005645760405162461bcd60e51b81526004016200055b90620006fb565b60405180910390fd5b620005726000838362000606565b80600260008282546200058691906200073b565b90915550506001600160a01b03821660009081526020819052604081208054839290620005b59084906200073b565b90915550506040516001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90620005fa90859062000732565b60405180910390a35050565b505050565b828054620006199062000760565b90600052602060002090601f0160209004810192826200063d576000855562000688565b82601f106200065857805160ff191683800117855562000688565b8280016001018555821562000688579182015b82811115620006885782518255916020019190600101906200066b565b50620006969291506200069a565b5090565b5b808211156200069657600081556001016200069b565b600060208284031215620006c3578081fd5b81516001600160a01b0381168114620006da578182fd5b9392505050565b6001600160a01b0392831681529116602082015260400190565b6020808252601f908201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604082015260600190565b90815260200190565b600082198211156200075b57634e487b7160e01b81526011600452602481fd5b500190565b6002810460018216806200077557607f821691505b602082108114156200079757634e487b7160e01b600052602260045260246000fd5b50919050565b61464d80620007ad6000396000f3fe60806040526004361061043f5760003560e01c8063735de9f711610234578063a8bcf4741161012e578063d4c989d3116100b6578063e69bb8211161007a578063e69bb82114610c04578063e7a324dc14610c24578063f1127ed814610c39578063f2fde38b14610c67578063f9a7eb6514610c8757610446565b8063d4c989d314610b6f578063db90127e14610b8f578063dd62ed3e14610baf578063dea0621014610bcf578063df8408fe14610be457610446565b8063c6610657116100fd578063c661065714610ae5578063c816841b14610b05578063c884ef8314610b1a578063c9567bf914610b3a578063d2fcc00114610b4f57610446565b8063a8bcf47414610a65578063a9059cbb14610a85578063b4b5ea5714610aa5578063c3cda52014610ac557610446565b80638ea5220f116101bc5780639f9a4e7f116101805780639f9a4e7f146109db578063a3d80bae146109fb578063a457c2d714610a10578063a605c7b414610a30578063a758046c14610a4557610446565b80638ea5220f1461095c578063908bb2ae1461097157806395d89b4114610991578063997664d7146109a65780639dc29fac146109bb57610446565b80637ecebe00116102035780637ecebe00146108dd57806380ca663d146108fd578063859864aa146109125780638a1c6620146109325780638da5cb5b1461094757610446565b8063735de9f71461087e578063744d15911461089357806375f0a874146108a8578063782d6fe1146108bd57610446565b80634e8c9f90116103455780636138b7c9116102cd5780636a36389b116102915780636a36389b146107e75780636dd3d39f146107fc5780636fcfff451461081c57806370a0823114610849578063715018a61461086957610446565b80636138b7c91461076857806362e546f91461077d578063658c27a914610792578063671d2555146107b257806368c51e35146107c757610446565b8063570ca73511610314578063570ca735146106de578063587cde1e146106f35780635c19a95c14610713578063608ae8541461073357806360d484891461074857610446565b80634e8c9f90146106695780635158ea1b1461068957806351bc3c85146106a95780635342acb4146106be57610446565b8063283dc96f116103c857806332cb6b0c1161039757806332cb6b0c146105df57806339509351146105f45780633ff8bf2e1461061457806346b9fa46146106295780634b418bc51461064957610446565b8063283dc96f1461056857806329605e771461057d5780632a3606311461059d578063313ce567146105bd57610446565b8063095ea7b31161040f578063095ea7b3146104cf57806318160ddd146104ef57806320606b701461051157806323b872dd1461052657806327c8f8351461054657610446565b8062dc12971461044b5780630305caff1461047657806306fdde031461049857806308381ced146104ba57610446565b3661044657005b600080fd5b34801561045757600080fd5b50610460610ca7565b60405161046d9190613cd4565b60405180910390f35b34801561048257600080fd5b50610496610491366004613967565b610cb7565b005b3480156104a457600080fd5b506104ad610d20565b60405161046d9190613d4e565b3480156104c657600080fd5b50610496610db2565b3480156104db57600080fd5b506104606104ea366004613a4b565b610e5a565b3480156104fb57600080fd5b50610504610e78565b60405161046d9190613cdf565b34801561051d57600080fd5b50610504610e7e565b34801561053257600080fd5b506104606105413660046139d7565b610ea2565b34801561055257600080fd5b5061055b610f39565b60405161046d9190613ca6565b34801561057457600080fd5b506104ad610f48565b34801561058957600080fd5b50610496610598366004613967565b610fd6565b3480156105a957600080fd5b506104966105b8366004613967565b611035565b3480156105c957600080fd5b506105d2611098565b60405161046d9190614438565b3480156105eb57600080fd5b5061050461109d565b34801561060057600080fd5b5061046061060f366004613a4b565b6110ad565b34801561062057600080fd5b506105046110fc565b34801561063557600080fd5b50610504610644366004613967565b611102565b34801561065557600080fd5b50610504610664366004613967565b611121565b34801561067557600080fd5b50610496610684366004613b63565b611133565b34801561069557600080fd5b506104966106a4366004613b63565b611199565b3480156106b557600080fd5b506104966113fb565b3480156106ca57600080fd5b506104606106d9366004613967565b61142f565b3480156106ea57600080fd5b5061055b61144d565b3480156106ff57600080fd5b5061055b61070e366004613967565b61145c565b34801561071f57600080fd5b5061049661072e366004613967565b61147a565b34801561073f57600080fd5b50610504611484565b34801561075457600080fd5b50610460610763366004613967565b61148a565b34801561077457600080fd5b506105046114a8565b34801561078957600080fd5b506104966114ae565b34801561079e57600080fd5b506104606107ad366004613967565b6115fb565b3480156107be57600080fd5b50610496611619565b3480156107d357600080fd5b506104966107e2366004613c13565b611650565b3480156107f357600080fd5b506105046116c3565b34801561080857600080fd5b50610460610817366004613967565b6116c9565b34801561082857600080fd5b5061083c610837366004613967565b6116e7565b60405161046d9190614411565b34801561085557600080fd5b50610504610864366004613967565b6116ff565b34801561087557600080fd5b5061049661171a565b34801561088a57600080fd5b5061055b6117a3565b34801561089f57600080fd5b506105046117b2565b3480156108b457600080fd5b5061055b6117b8565b3480156108c957600080fd5b506105046108d8366004613a4b565b6117c7565b3480156108e957600080fd5b506105046108f8366004613967565b6119ec565b34801561090957600080fd5b506104966119fe565b34801561091e57600080fd5b5061049661092d366004613b04565b611a35565b34801561093e57600080fd5b506104ad611b07565b34801561095357600080fd5b5061055b611b14565b34801561096857600080fd5b5061055b611b23565b34801561097d57600080fd5b5061049661098c366004613967565b611b32565b34801561099d57600080fd5b506104ad611d2f565b3480156109b257600080fd5b50610504611d3e565b3480156109c757600080fd5b506104966109d6366004613a4b565b611d44565b3480156109e757600080fd5b506104966109f6366004613b49565b611d91565b348015610a0757600080fd5b506104ad611dd9565b348015610a1c57600080fd5b50610460610a2b366004613a4b565b611de6565b348015610a3c57600080fd5b50610504611e61565b348015610a5157600080fd5b50610496610a60366004613c2b565b611e67565b348015610a7157600080fd5b50610496610a80366004613b7d565b611f02565b348015610a9157600080fd5b50610460610aa0366004613a4b565b612044565b348015610ab157600080fd5b50610504610ac0366004613967565b612058565b348015610ad157600080fd5b50610496610ae0366004613a76565b6120cd565b348015610af157600080fd5b5061055b610b00366004613c13565b6122a7565b348015610b1157600080fd5b5061055b6122d6565b348015610b2657600080fd5b50610504610b35366004613967565b6122e5565b348015610b4657600080fd5b506104966122f7565b348015610b5b57600080fd5b50610496610b6a366004613a17565b61235a565b348015610b7b57600080fd5b50610496610b8a366004613a17565b6123af565b348015610b9b57600080fd5b50610504610baa366004613967565b612404565b348015610bbb57600080fd5b50610504610bca36600461399f565b61249b565b348015610bdb57600080fd5b506105046124c6565b348015610bf057600080fd5b50610496610bff366004613a17565b6124cc565b348015610c1057600080fd5b50610504610c1f366004613967565b612521565b348015610c3057600080fd5b50610504612533565b348015610c4557600080fd5b50610c59610c54366004613acf565b612557565b60405161046d929190614422565b348015610c7357600080fd5b50610496610c82366004613967565b612584565b348015610c9357600080fd5b50610496610ca2366004613c13565b612645565b601454600160a01b900460ff1681565b610cbf612674565b6001600160a01b0316610cd0611b14565b6001600160a01b031614610cff5760405162461bcd60e51b8152600401610cf69061416e565b60405180910390fd5b6001600160a01b03166000908152601860205260409020805460ff19169055565b606060038054610d2f90614535565b80601f0160208091040260200160405190810160405280929190818152602001828054610d5b90614535565b8015610da85780601f10610d7d57610100808354040283529160200191610da8565b820191906000526020600020905b815481529060010190602001808311610d8b57829003601f168201915b5050505050905090565b6014546001600160a01b03163314610ddc5760405162461bcd60e51b8152600401610cf690613f0c565b600680546005805461ffff60b01b1916601960b21b1761ffff60c01b1916601960c31b176001600160f01b0316601960f21b1761ffff60d01b1916601960d31b1761ffff60e01b1916604b60e21b17905561019065ffff000000001990911665012c000000001761ffff19161763ffff000019166302580000179055565b6000610e6e610e67612674565b8484612678565b5060015b92915050565b60025490565b7f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a86681565b6000610eaf84848461272c565b6001600160a01b038416600090815260016020526040812081610ed0612674565b6001600160a01b03166001600160a01b0316815260200190815260200160002054905082811015610f135760405162461bcd60e51b8152600401610cf690614126565b610f2e85610f1f612674565b610f2986856144f9565b612678565b506001949350505050565b600f546001600160a01b031681565b601a8054610f5590614535565b80601f0160208091040260200160405190810160405280929190818152602001828054610f8190614535565b8015610fce5780601f10610fa357610100808354040283529160200191610fce565b820191906000526020600020905b815481529060010190602001808311610fb157829003601f168201915b505050505081565b6014546001600160a01b031633146110005760405162461bcd60e51b8152600401610cf690613f0c565b6001600160a01b03811661101357600080fd5b601480546001600160a01b0319166001600160a01b0392909216919091179055565b61103d612674565b6001600160a01b031661104e611b14565b6001600160a01b0316146110745760405162461bcd60e51b8152600401610cf69061416e565b6001600160a01b03166000908152601860205260409020805460ff19166001179055565b601290565b6b204fce5e3e2502611000000081565b6000610e6e6110ba612674565b8484600160006110c8612674565b6001600160a01b03908116825260208083019390935260409182016000908120918b1681529252902054610f29919061446c565b60075481565b6001600160a01b0381166000908152601f60205260409020545b919050565b601e6020526000908152604090205481565b61113b612674565b6001600160a01b031661114c611b14565b6001600160a01b0316146111725760405162461bcd60e51b8152600401610cf69061416e565b60055461ffff600160a01b9091048116908216111561119057600080fd5b61ffff16600755565b336000908152601f60205260409020544210156111c85760405162461bcd60e51b8152600401610cf690613ffe565b6111d1306116ff565b600954116113f85760006111e433612404565b9050600081116112065760405162461bcd60e51b8152600401610cf6906140c2565b600060208361ffff168154811061122d57634e487b7160e01b600052603260045260246000fd5b906000526020600020906002020190508261ffff166000141561125a576112543383612044565b5061138b565b8261ffff16600114156112fb5760105461127f9030906001600160a01b031684612678565b6010546001600160a01b031663791ac94783600060018501336112a44261012c612daf565b6040518663ffffffff1660e01b81526004016112c49594939291906143b1565b600060405180830381600087803b1580156112de57600080fd5b505af11580156112f2573d6000803e3d6000fd5b5050505061138b565b6010546113139030906001600160a01b031684612678565b6010546001600160a01b0316635c11d79583600060018501336113384261012c612daf565b6040518663ffffffff1660e01b81526004016113589594939291906143b1565b600060405180830381600087803b15801561137257600080fd5b505af1158015611386573d6000803e3d6000fd5b505050505b336000908152601d60205260409020546113a59083612daf565b336000908152601d6020908152604080832093909355600a54601e909152919020556009546113d49083612dbb565b600955600e546113e5904290612daf565b336000908152601f602052604090205550505b50565b6014546001600160a01b031633146114255760405162461bcd60e51b8152600401610cf690613f0c565b61142d612dc7565b565b6001600160a01b031660009081526015602052604090205460ff1690565b6014546001600160a01b031690565b6001600160a01b039081166000908152602160205260409020541690565b6113f83382613042565b600c5481565b6001600160a01b031660009081526018602052604090205460ff1690565b600b5481565b6014546001600160a01b031633146114d85760405162461bcd60e51b8152600401610cf690613f0c565b60055460065460009161ffff600160b01b82048116926115049290821691600160d01b90910416614446565b61150e9190614446565b61ffff1690506000479050600061153a83611534600b54856130d790919063ffffffff16565b906130e3565b9050600061155784611534600c54866130d790919063ffffffff16565b9050600061157485611534600d54876130d790919063ffffffff16565b6012549091506001600160a01b03166108fc611590838661446c565b6040518115909202916000818181858888f193505050501580156115b8573d6000803e3d6000fd5b506013546040516001600160a01b039091169083156108fc029084906000818181858888f193505050501580156115f3573d6000803e3d6000fd5b505050505050565b6001600160a01b031660009081526016602052604090205460ff1690565b6014546001600160a01b031633146116435760405162461bcd60e51b8152600401610cf690613f0c565b6101906007819055600855565b611658612674565b6001600160a01b0316611669611b14565b6001600160a01b03161461168f5760405162461bcd60e51b8152600401610cf69061416e565b60af81101580156116a257506127108111155b6116be5760405162461bcd60e51b8152600401610cf690613ecb565b600855565b600d5481565b6001600160a01b031660009081526017602052604090205460ff1690565b60236020526000908152604090205463ffffffff1681565b6001600160a01b031660009081526020819052604090205490565b611722612674565b6001600160a01b0316611733611b14565b6001600160a01b0316146117595760405162461bcd60e51b8152600401610cf69061416e565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b6010546001600160a01b031681565b60085481565b6012546001600160a01b031681565b60004382106117e85760405162461bcd60e51b8152600401610cf6906142b1565b6001600160a01b03831660009081526023602052604090205463ffffffff1680611816576000915050610e72565b6001600160a01b0384166000908152602260205260408120849161183b600185614510565b63ffffffff908116825260208201929092526040016000205416116118a4576001600160a01b03841660009081526022602052604081209061187e600184614510565b63ffffffff1663ffffffff16815260200190815260200160002060010154915050610e72565b6001600160a01b038416600090815260226020908152604080832083805290915290205463ffffffff168310156118df576000915050610e72565b6000806118ed600184614510565b90505b8163ffffffff168163ffffffff1611156119b557600060026119128484614510565b61191c91906144b7565b6119269083614510565b6001600160a01b038816600090815260226020908152604080832063ffffffff808616855290835292819020815180830190925280549093168082526001909301549181019190915291925087141561198957602001519450610e729350505050565b805163ffffffff168711156119a0578193506119ae565b6119ab600183614510565b92505b50506118f0565b506001600160a01b038516600090815260226020908152604080832063ffffffff9094168352929052206001015491505092915050565b60246020526000908152604090205481565b6014546001600160a01b03163314611a285760405162461bcd60e51b8152600401610cf690613f0c565b6127106007819055600855565b6014546001600160a01b03163314611a5f5760405162461bcd60e51b8152600401610cf690613f0c565b604080518082019091526001600160a01b03828116825260208083018581528154600181018355600083905284517fc97bfaf2f8ee708c303a06d134f5ecd8389ae0432af62dc132a24118292866bb600290920291820180546001600160a01b0319169190951617845590518051611b00937fc97bfaf2f8ee708c303a06d134f5ecd8389ae0432af62dc132a24118292866bc909301929190910190613810565b5050505050565b601b8054610f5590614535565b6005546001600160a01b031690565b6013546001600160a01b031681565b611b3a612674565b6001600160a01b0316611b4b611b14565b6001600160a01b031614611b715760405162461bcd60e51b8152600401610cf69061416e565b601080546001600160a01b0319166001600160a01b0383811691909117918290556040805163c45a015560e01b81529051929091169163c45a015591600480820192602092909190829003018186803b158015611bcd57600080fd5b505afa158015611be1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c059190613983565b6001600160a01b031663e6a4390530601060009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015611c6257600080fd5b505afa158015611c76573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c9a9190613983565b6040518363ffffffff1660e01b8152600401611cb7929190613cba565b60206040518083038186803b158015611ccf57600080fd5b505afa158015611ce3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d079190613983565b601180546001600160a01b0319166001600160a01b039283161790819055166113f857600080fd5b606060048054610d2f90614535565b60095481565b611d4c612674565b6001600160a01b0316611d5d611b14565b6001600160a01b031614611d835760405162461bcd60e51b8152600401610cf69061416e565b611d8d82826130ef565b5050565b6014546001600160a01b03163314611dbb5760405162461bcd60e51b8152600401610cf690613f0c565b60148054911515600160a01b0260ff60a01b19909216919091179055565b601c8054610f5590614535565b60008060016000611df5612674565b6001600160a01b0390811682526020808301939093526040918201600090812091881681529252902054905082811015611e415760405162461bcd60e51b8152600401610cf6906142fc565b611e57611e4c612674565b85610f2986856144f9565b5060019392505050565b600e5481565b6014546001600160a01b03163314611e915760405162461bcd60e51b8152600401610cf690613f0c565b600060208460ff1681548110611eb757634e487b7160e01b600052603260045260246000fd5b9060005260206000209060020201905082816001019080519060200190611edf929190613810565b5080546001600160a01b0319166001600160a01b03929092169190911790555050565b611f0a612674565b6001600160a01b0316611f1b611b14565b6001600160a01b031614611f415760405162461bcd60e51b8152600401610cf69061416e565b600554600160a01b900461ffff1682611f5a868b614446565b611f649190614446565b61ffff161115611f865760405162461bcd60e51b8152600401610cf690614229565b600680546005805461ffff60b01b1916600160b01b61ffff9b8c16021761ffff60c01b1916600160c01b998b1699909902989098176001600160f01b0316600160f01b978a16979097029690961761ffff60d01b1916600160d01b958916959095029490941761ffff60e01b1916600160e01b938816939093029290921790945565ffff0000000019909216640100000000958516959095029490941761ffff19169183169190911763ffff00001916620100009190921602179055565b6000610e6e612051612674565b848461272c565b6001600160a01b03811660009081526023602052604081205463ffffffff16806120835760006120c6565b6001600160a01b0383166000908152602260205260408120906120a7600184614510565b63ffffffff1663ffffffff168152602001908152602001600020600101545b9392505050565b60007f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a8666120f8610d20565b805190602001206121076131d5565b3060405160200161211b9493929190613d0c565b60405160208183030381529060405280519060200120905060007fe48329057bfd03d55e49b547132e39cffd9c1820ad7b9d4c5307691425d15adf88888860405160200161216c9493929190613ce8565b60405160208183030381529060405280519060200120905060008282604051602001612199929190613c8b565b6040516020818303038152906040528051906020012090506000600182888888604051600081526020016040526040516121d69493929190613d30565b6020604051602081039080840390855afa1580156121f8573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b03811661222b5760405162461bcd60e51b8152600401610cf690613fb7565b6001600160a01b038116600090815260246020526040812080549161224f83614570565b9190505589146122715760405162461bcd60e51b8152600401610cf690613da1565b874211156122915760405162461bcd60e51b8152600401610cf69061407b565b61229b818b613042565b50505050505050505050565b602081815481106122b757600080fd5b60009182526020909120600290910201546001600160a01b0316905081565b6011546001600160a01b031681565b601d6020526000908152604090205481565b6122ff612674565b6001600160a01b0316612310611b14565b6001600160a01b0316146123365760405162461bcd60e51b8152600401610cf69061416e565b6019805461ff0019166101001790556014805460ff60a01b1916600160a01b179055565b6014546001600160a01b031633146123845760405162461bcd60e51b8152600401610cf690613f0c565b6001600160a01b03919091166000908152601760205260409020805460ff1916911515919091179055565b6014546001600160a01b031633146123d95760405162461bcd60e51b8152600401610cf690613f0c565b6001600160a01b03919091166000908152601660205260409020805460ff1916911515919091179055565b600080612410836116ff565b9050600061241c6131d9565b90508061242e5760009250505061111c565b6001600160a01b0384166000908152601e6020526040812054600a5461245391612dbb565b9050801561249057600061246b8361153484876130d7565b90506009548111156124855760095494505050505061111c565b935061111c92505050565b506000949350505050565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b600a5481565b6014546001600160a01b031633146124f65760405162461bcd60e51b8152600401610cf690613f0c565b6001600160a01b03919091166000908152601560205260409020805460ff1916911515919091179055565b601f6020526000908152604090205481565b7fe48329057bfd03d55e49b547132e39cffd9c1820ad7b9d4c5307691425d15adf81565b60226020908152600092835260408084209091529082529020805460019091015463ffffffff9091169082565b61258c612674565b6001600160a01b031661259d611b14565b6001600160a01b0316146125c35760405162461bcd60e51b8152600401610cf69061416e565b6001600160a01b0381166125e95760405162461bcd60e51b8152600401610cf690613f2f565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6014546001600160a01b0316331461266f5760405162461bcd60e51b8152600401610cf690613f0c565b600e55565b3390565b6001600160a01b03831661269e5760405162461bcd60e51b8152600401610cf69061424a565b6001600160a01b0382166126c45760405162461bcd60e51b8152600401610cf690613f75565b6001600160a01b0380841660008181526001602090815260408083209487168084529490915290819020849055517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259061271f908590613cdf565b60405180910390a3505050565b601954610100900460ff168061275a5750612745611b14565b6001600160a01b0316836001600160a01b0316145b8061277d5750612768611b14565b6001600160a01b0316826001600160a01b0316145b8061279557506010546001600160a01b038481169116145b6127b15760405162461bcd60e51b8152600401610cf69061428e565b6001600160a01b03831660009081526018602052604090205460ff16806127f057506001600160a01b03821660009081526018602052604090205460ff165b156128175760195460ff166128175760405162461bcd60e51b8152600401610cf6906140ef565b601454600160a01b900460ff161515600114801561283f5750601354600160a01b900460ff16155b801561285557506010546001600160a01b031615155b801561286b57506011546001600160a01b031615155b801561288557506011546001600160a01b03848116911614155b801561289f57506010546001600160a01b03848116911614155b80156128c457506128ae611b14565b6001600160a01b0316836001600160a01b031614155b80156128d957506001600160a01b0383163014155b156128e6576128e6612dc7565b600554600854600091600160a01b900461ffff1690612903610e78565b61290d91906144da565b61291791906144a3565b90506000600560149054906101000a900461ffff1661ffff1660075461293b610e78565b61294591906144da565b61294f91906144a3565b9050808311158061297857506001600160a01b03851660009081526016602052604090205460ff165b6129945760405162461bcd60e51b8152600401610cf690613e27565b61299c611b14565b6001600160a01b0316856001600160a01b0316141580156129c657506001600160a01b0384163014155b80156129e05750600f546001600160a01b03858116911614155b80156129fa57506011546001600160a01b03858116911614155b15612a5b576000612a0a856116ff565b6001600160a01b03861660009081526017602052604090205490915060ff1680612a3d575082612a3a858361446c565b11155b612a595760405162461bcd60e51b8152600401610cf690613e94565b505b6001600160a01b03851660009081526015602052604090205460ff1615612a8c57612a87858585613210565b611b00565b600554600090612ab69061ffff600160a01b8204811691611534918891600160b01b9004166130d7565b600554909150600090612ae39061ffff600160a01b8204811691611534918991600160c01b9004166130d7565b600554909150600090612b109061ffff600160a01b8204811691611534918a91600160f01b9004166130d7565b600554909150600090612b3d9061ffff600160a01b8204811691611534918b91600160d01b9004166130d7565b600554909150600090612b6a9061ffff600160a01b8204811691611534918c91600160e01b9004166130d7565b600554600654919250600091612b949161ffff600160a01b909104811691611534918d91166130d7565b600554600654919250600091612bc49161ffff600160a01b909104811691611534918e91620100009004166130d7565b600554600654919250600091612bf69161ffff600160a01b909104811691611534918f916401000000009004166130d7565b90506000818386612c078a8c61446c565b612c11919061446c565b612c1b919061446c565b612c25919061446c565b90506000828588612c368b8e61446c565b612c40919061446c565b612c4a919061446c565b612c54919061446c565b6011549091506001600160a01b038f811691161415612cf057612c768f6116ff565b8d1415612c8857612c888f6000613338565b612c928d83612dbb565b9c50612c9f8f8f8f613210565b612caa8f308b613210565b612cca8f600f60009054906101000a90046001600160a01b03168a613210565b612cd58f3088613210565b612ce08f3086613210565b612ceb8f3085613210565b612d7e565b612cfa8d82612dbb565b9c50612d078f8f8f613210565b612d128f308c613210565b612d328f600f60009054906101000a90046001600160a01b03168a613210565b612d3d8f3089613210565b612d488f3087613210565b612d538f3085613210565b612d5c8e611102565b612d7e57612d7e8e612d79600e5442612daf90919063ffffffff16565b613338565b600954612d8b9084612daf565b600955600a54612d9b9084612daf565b600a55505050505050505050505050505050565b60006120c6828461446c565b60006120c682846144f9565b6013805460ff60a01b1916600160a01b17905560058054600680546001600160b01b03831690935565ffffffffffff198316905561ffff600160b01b8204811692600160c01b8304821692600160f01b8104831692600160d01b8204811692600160e01b909204811691808216916201000082048116916401000000009004166000612e52306116ff565b90506000600d54600c54600b54612e69919061446c565b612e73919061446c565b9050600954821115612f7757600954612e8d908390612dbb565b9150612e9882613354565b60004790506000612eb883611534600b54856130d790919063ffffffff16565b90506000612ed584611534600c54866130d790919063ffffffff16565b90506000612ef285611534600d54876130d790919063ffffffff16565b6012549091506001600160a01b03166108fc612f0e838661446c565b6040518115909202916000818181858888f19350505050158015612f36573d6000803e3d6000fd5b506013546040516001600160a01b039091169083156108fc029084906000818181858888f19350505050158015612f71573d6000803e3d6000fd5b50505050505b50506005805461ffff60b01b1916600160b01b61ffff9a8b16021761ffff60c01b1916600160c01b988a1698909802979097176001600160f01b0316600160f01b968916969096029590951761ffff60d01b1916600160d01b948816949094029390931761ffff60e01b1916600160e01b92871692909202919091179093556006805461ffff19169385169390931763ffff0000191662010000918516919091021765ffff00000000191664010000000091909316029190911790556013805460ff60a01b19169055565b6001600160a01b0380831660009081526021602052604081205490911690613069846116ff565b6001600160a01b0385811660008181526021602052604080822080546001600160a01b031916898616908117909155905194955093928616927f3134e8a2e6d97e929a7e54011ea5485d7d196dd5f0ba4d4ef95803e8e3fc257f9190a46130d18284836134db565b50505050565b60006120c682846144da565b60006120c682846144a3565b6001600160a01b0382166131155760405162461bcd60e51b8152600401610cf6906141a3565b6131218260008361363a565b6001600160a01b0382166000908152602081905260409020548181101561315a5760405162461bcd60e51b8152600401610cf690613e52565b61316482826144f9565b6001600160a01b038416600090815260208190526040812091909155600280548492906131929084906144f9565b90915550506040516000906001600160a01b038516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9061271f908690613cdf565b4690565b60115460009081906131f3906001600160a01b03166116ff565b9050600061320982613203610e78565b90612dbb565b9250505090565b6001600160a01b0383166132365760405162461bcd60e51b8152600401610cf6906141e4565b6001600160a01b03821661325c5760405162461bcd60e51b8152600401610cf690613de4565b61326783838361363a565b6001600160a01b038316600090815260208190526040902054818110156132a05760405162461bcd60e51b8152600401610cf690614035565b6132aa82826144f9565b6001600160a01b0380861660009081526020819052604080822093909355908516815290812080548492906132e090849061446c565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161332a9190613cdf565b60405180910390a350505050565b6001600160a01b039091166000908152601f6020526040902055565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061339757634e487b7160e01b600052603260045260246000fd5b6001600160a01b03928316602091820292909201810191909152601054604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b1580156133eb57600080fd5b505afa1580156133ff573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134239190613983565b8160018151811061344457634e487b7160e01b600052603260045260246000fd5b6001600160a01b03928316602091820292909201015260105461346a9130911684612678565b6010546001600160a01b031663791ac947836000843061348d426201518061446c565b6040518663ffffffff1660e01b81526004016134ad959493929190614341565b600060405180830381600087803b1580156134c757600080fd5b505af11580156115f3573d6000803e3d6000fd5b816001600160a01b0316836001600160a01b0316141580156134fd5750600081115b1561363a576001600160a01b038316156135a0576001600160a01b03831660009081526023602052604081205463ffffffff16908161353d576000613580565b6001600160a01b038516600090815260226020526040812090613561600185614510565b63ffffffff1663ffffffff168152602001908152602001600020600101545b9050600061358e8285612dbb565b905061359c8684848461363f565b5050505b6001600160a01b0382161561363a576001600160a01b03821660009081526023602052604081205463ffffffff1690816135db57600061361e565b6001600160a01b0384166000908152602260205260408120906135ff600185614510565b63ffffffff1663ffffffff168152602001908152602001600020600101545b9050600061362c8285612daf565b90506115f38584848461363f565b505050565b6000613663436040518060600160405280603581526020016145e3603591396137e0565b905060008463ffffffff161180156136bd57506001600160a01b038516600090815260226020526040812063ffffffff8316916136a1600188614510565b63ffffffff908116825260208201929092526040016000205416145b15613706576001600160a01b038516600090815260226020526040812083916136e7600188614510565b63ffffffff168152602081019190915260400160002060010155613796565b60408051808201825263ffffffff838116825260208083018681526001600160a01b038a166000908152602283528581208a851682529092529390209151825463ffffffff191691161781559051600191820155613765908590614484565b6001600160a01b0386166000908152602360205260409020805463ffffffff191663ffffffff929092169190911790555b846001600160a01b03167fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a72484846040516137d1929190614403565b60405180910390a25050505050565b60008164010000000084106138085760405162461bcd60e51b8152600401610cf69190613d4e565b509192915050565b828054828255906000526020600020908101928215613865579160200282015b8281111561386557825182546001600160a01b0319166001600160a01b03909116178255602090920191600190910190613830565b50613871929150613875565b5090565b5b808211156138715760008155600101613876565b803561111c816145cd565b600082601f8301126138a5578081fd5b8135602067ffffffffffffffff808311156138c2576138c26145b7565b818302604051838282010181811084821117156138e1576138e16145b7565b604052848152838101925086840182880185018910156138ff578687fd5b8692505b85831015613928576139148161388a565b845292840192600192909201918401613903565b50979650505050505050565b8035801515811461111c57600080fd5b803561ffff8116811461111c57600080fd5b803560ff8116811461111c57600080fd5b600060208284031215613978578081fd5b81356120c6816145cd565b600060208284031215613994578081fd5b81516120c6816145cd565b600080604083850312156139b1578081fd5b82356139bc816145cd565b915060208301356139cc816145cd565b809150509250929050565b6000806000606084860312156139eb578081fd5b83356139f6816145cd565b92506020840135613a06816145cd565b929592945050506040919091013590565b60008060408385031215613a29578182fd5b8235613a34816145cd565b9150613a4260208401613934565b90509250929050565b60008060408385031215613a5d578182fd5b8235613a68816145cd565b946020939093013593505050565b60008060008060008060c08789031215613a8e578182fd5b8635613a99816145cd565b95506020870135945060408701359350613ab560608801613956565b92506080870135915060a087013590509295509295509295565b60008060408385031215613ae1578182fd5b8235613aec816145cd565b9150602083013563ffffffff811681146139cc578182fd5b60008060408385031215613b16578182fd5b823567ffffffffffffffff811115613b2c578283fd5b613b3885828601613895565b92505060208301356139cc816145cd565b600060208284031215613b5a578081fd5b6120c682613934565b600060208284031215613b74578081fd5b6120c682613944565b600080600080600080600080610100898b031215613b99578182fd5b613ba289613944565b9750613bb060208a01613944565b9650613bbe60408a01613944565b9550613bcc60608a01613944565b9450613bda60808a01613944565b9350613be860a08a01613944565b9250613bf660c08a01613944565b9150613c0460e08a01613944565b90509295985092959890939650565b600060208284031215613c24578081fd5b5035919050565b600080600060608486031215613c3f578081fd5b613c4884613956565b9250602084013567ffffffffffffffff811115613c63578182fd5b613c6f86828701613895565b9250506040840135613c80816145cd565b809150509250925092565b61190160f01b81526002810192909252602282015260420190565b6001600160a01b0391909116815260200190565b6001600160a01b0392831681529116602082015260400190565b901515815260200190565b90815260200190565b9384526001600160a01b039290921660208401526040830152606082015260800190565b938452602084019290925260408301526001600160a01b0316606082015260800190565b93845260ff9290921660208401526040830152606082015260800190565b6000602080835283518082850152825b81811015613d7a57858101830151858201604001528201613d5e565b81811115613d8b5783604083870101525b50601f01601f1916929092016040019392505050565b60208082526023908201527f56455253453a3a64656c656761746542795369673a20696e76616c6964206e6f6040820152626e636560e81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b602080825260119082015270151608131a5b5a5d08115e18d959591959607a1b604082015260600190565b60208082526022908201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604082015261636560f01b606082015260800190565b60208082526019908201527f4d61782057616c6c6574204c696d697420457863656564656400000000000000604082015260600190565b60208082526021908201527f425053206d757374206265206265747765656e2031373520616e6420313030306040820152600360fc1b606082015260800190565b60208082526009908201526810b7b832b930ba37b960b91b604082015260600190565b60208082526026908201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160408201526564647265737360d01b606082015260800190565b60208082526022908201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604082015261737360f01b606082015260800190565b60208082526027908201527f56455253453a3a64656c656761746542795369673a20696e76616c6964207369604082015266676e617475726560c81b606082015260800190565b6020808252601d908201527f77697468647261772074696d657374616d70203a206e6f7420676f6f64000000604082015260600190565b60208082526026908201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604082015265616c616e636560d01b606082015260800190565b60208082526027908201527f56455253453a3a64656c656761746542795369673a207369676e617475726520604082015266195e1c1a5c995960ca1b606082015260800190565b6020808252601390820152726e6f7420656e6f75676820746f20636c61696d60681b604082015260600190565b6020808252601b908201527f626f7473206172656e7420616c6c6f77656420746f2074726164650000000000604082015260600190565b60208082526028908201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616040820152676c6c6f77616e636560c01b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526021908201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736040820152607360f81b606082015260800190565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b6020808252600790820152662176616c75657360c81b604082015260600190565b60208082526024908201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646040820152637265737360e01b606082015260800190565b602080825260099082015268217472616461626c6560b81b604082015260600190565b6020808252602b908201527f42455456455253453a3a6765745072696f72566f7465733a206e6f742079657460408201526a0819195d195c9b5a5b995960aa1b606082015260800190565b60208082526025908201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604082015264207a65726f60d81b606082015260800190565b600060a082018783526020878185015260a0604085015281875180845260c0860191508289019350845b818110156143905784516001600160a01b03168352938301939183019160010161436b565b50506001600160a01b03969096166060850152505050608001529392505050565b600060a082018783526020878185015260a0604085015281875480845260c0860191508885528285209350845b818110156143905784546001600160a01b0316835260019485019492840192016143de565b918252602082015260400190565b63ffffffff91909116815260200190565b63ffffffff929092168252602082015260400190565b60ff91909116815260200190565b600061ffff8083168185168083038211156144635761446361458b565b01949350505050565b6000821982111561447f5761447f61458b565b500190565b600063ffffffff8083168185168083038211156144635761446361458b565b6000826144b2576144b26145a1565b500490565b600063ffffffff808416806144ce576144ce6145a1565b92169190910492915050565b60008160001904831182151516156144f4576144f461458b565b500290565b60008282101561450b5761450b61458b565b500390565b600063ffffffff8381169083168181101561452d5761452d61458b565b039392505050565b60028104600182168061454957607f821691505b6020821081141561456a57634e487b7160e01b600052602260045260246000fd5b50919050565b60006000198214156145845761458461458b565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b03811681146113f857600080fdfe56455253453a3a5f7772697465436865636b706f696e743a20626c6f636b206e756d62657220657863656564732033322062697473a2646970667358221220d3a00e7ae0fb448e575a20e9240aab8a4110f4527ad297ff4fa141aec07086ba64736f6c63430008000033

Deployed Bytecode

0x60806040526004361061043f5760003560e01c8063735de9f711610234578063a8bcf4741161012e578063d4c989d3116100b6578063e69bb8211161007a578063e69bb82114610c04578063e7a324dc14610c24578063f1127ed814610c39578063f2fde38b14610c67578063f9a7eb6514610c8757610446565b8063d4c989d314610b6f578063db90127e14610b8f578063dd62ed3e14610baf578063dea0621014610bcf578063df8408fe14610be457610446565b8063c6610657116100fd578063c661065714610ae5578063c816841b14610b05578063c884ef8314610b1a578063c9567bf914610b3a578063d2fcc00114610b4f57610446565b8063a8bcf47414610a65578063a9059cbb14610a85578063b4b5ea5714610aa5578063c3cda52014610ac557610446565b80638ea5220f116101bc5780639f9a4e7f116101805780639f9a4e7f146109db578063a3d80bae146109fb578063a457c2d714610a10578063a605c7b414610a30578063a758046c14610a4557610446565b80638ea5220f1461095c578063908bb2ae1461097157806395d89b4114610991578063997664d7146109a65780639dc29fac146109bb57610446565b80637ecebe00116102035780637ecebe00146108dd57806380ca663d146108fd578063859864aa146109125780638a1c6620146109325780638da5cb5b1461094757610446565b8063735de9f71461087e578063744d15911461089357806375f0a874146108a8578063782d6fe1146108bd57610446565b80634e8c9f90116103455780636138b7c9116102cd5780636a36389b116102915780636a36389b146107e75780636dd3d39f146107fc5780636fcfff451461081c57806370a0823114610849578063715018a61461086957610446565b80636138b7c91461076857806362e546f91461077d578063658c27a914610792578063671d2555146107b257806368c51e35146107c757610446565b8063570ca73511610314578063570ca735146106de578063587cde1e146106f35780635c19a95c14610713578063608ae8541461073357806360d484891461074857610446565b80634e8c9f90146106695780635158ea1b1461068957806351bc3c85146106a95780635342acb4146106be57610446565b8063283dc96f116103c857806332cb6b0c1161039757806332cb6b0c146105df57806339509351146105f45780633ff8bf2e1461061457806346b9fa46146106295780634b418bc51461064957610446565b8063283dc96f1461056857806329605e771461057d5780632a3606311461059d578063313ce567146105bd57610446565b8063095ea7b31161040f578063095ea7b3146104cf57806318160ddd146104ef57806320606b701461051157806323b872dd1461052657806327c8f8351461054657610446565b8062dc12971461044b5780630305caff1461047657806306fdde031461049857806308381ced146104ba57610446565b3661044657005b600080fd5b34801561045757600080fd5b50610460610ca7565b60405161046d9190613cd4565b60405180910390f35b34801561048257600080fd5b50610496610491366004613967565b610cb7565b005b3480156104a457600080fd5b506104ad610d20565b60405161046d9190613d4e565b3480156104c657600080fd5b50610496610db2565b3480156104db57600080fd5b506104606104ea366004613a4b565b610e5a565b3480156104fb57600080fd5b50610504610e78565b60405161046d9190613cdf565b34801561051d57600080fd5b50610504610e7e565b34801561053257600080fd5b506104606105413660046139d7565b610ea2565b34801561055257600080fd5b5061055b610f39565b60405161046d9190613ca6565b34801561057457600080fd5b506104ad610f48565b34801561058957600080fd5b50610496610598366004613967565b610fd6565b3480156105a957600080fd5b506104966105b8366004613967565b611035565b3480156105c957600080fd5b506105d2611098565b60405161046d9190614438565b3480156105eb57600080fd5b5061050461109d565b34801561060057600080fd5b5061046061060f366004613a4b565b6110ad565b34801561062057600080fd5b506105046110fc565b34801561063557600080fd5b50610504610644366004613967565b611102565b34801561065557600080fd5b50610504610664366004613967565b611121565b34801561067557600080fd5b50610496610684366004613b63565b611133565b34801561069557600080fd5b506104966106a4366004613b63565b611199565b3480156106b557600080fd5b506104966113fb565b3480156106ca57600080fd5b506104606106d9366004613967565b61142f565b3480156106ea57600080fd5b5061055b61144d565b3480156106ff57600080fd5b5061055b61070e366004613967565b61145c565b34801561071f57600080fd5b5061049661072e366004613967565b61147a565b34801561073f57600080fd5b50610504611484565b34801561075457600080fd5b50610460610763366004613967565b61148a565b34801561077457600080fd5b506105046114a8565b34801561078957600080fd5b506104966114ae565b34801561079e57600080fd5b506104606107ad366004613967565b6115fb565b3480156107be57600080fd5b50610496611619565b3480156107d357600080fd5b506104966107e2366004613c13565b611650565b3480156107f357600080fd5b506105046116c3565b34801561080857600080fd5b50610460610817366004613967565b6116c9565b34801561082857600080fd5b5061083c610837366004613967565b6116e7565b60405161046d9190614411565b34801561085557600080fd5b50610504610864366004613967565b6116ff565b34801561087557600080fd5b5061049661171a565b34801561088a57600080fd5b5061055b6117a3565b34801561089f57600080fd5b506105046117b2565b3480156108b457600080fd5b5061055b6117b8565b3480156108c957600080fd5b506105046108d8366004613a4b565b6117c7565b3480156108e957600080fd5b506105046108f8366004613967565b6119ec565b34801561090957600080fd5b506104966119fe565b34801561091e57600080fd5b5061049661092d366004613b04565b611a35565b34801561093e57600080fd5b506104ad611b07565b34801561095357600080fd5b5061055b611b14565b34801561096857600080fd5b5061055b611b23565b34801561097d57600080fd5b5061049661098c366004613967565b611b32565b34801561099d57600080fd5b506104ad611d2f565b3480156109b257600080fd5b50610504611d3e565b3480156109c757600080fd5b506104966109d6366004613a4b565b611d44565b3480156109e757600080fd5b506104966109f6366004613b49565b611d91565b348015610a0757600080fd5b506104ad611dd9565b348015610a1c57600080fd5b50610460610a2b366004613a4b565b611de6565b348015610a3c57600080fd5b50610504611e61565b348015610a5157600080fd5b50610496610a60366004613c2b565b611e67565b348015610a7157600080fd5b50610496610a80366004613b7d565b611f02565b348015610a9157600080fd5b50610460610aa0366004613a4b565b612044565b348015610ab157600080fd5b50610504610ac0366004613967565b612058565b348015610ad157600080fd5b50610496610ae0366004613a76565b6120cd565b348015610af157600080fd5b5061055b610b00366004613c13565b6122a7565b348015610b1157600080fd5b5061055b6122d6565b348015610b2657600080fd5b50610504610b35366004613967565b6122e5565b348015610b4657600080fd5b506104966122f7565b348015610b5b57600080fd5b50610496610b6a366004613a17565b61235a565b348015610b7b57600080fd5b50610496610b8a366004613a17565b6123af565b348015610b9b57600080fd5b50610504610baa366004613967565b612404565b348015610bbb57600080fd5b50610504610bca36600461399f565b61249b565b348015610bdb57600080fd5b506105046124c6565b348015610bf057600080fd5b50610496610bff366004613a17565b6124cc565b348015610c1057600080fd5b50610504610c1f366004613967565b612521565b348015610c3057600080fd5b50610504612533565b348015610c4557600080fd5b50610c59610c54366004613acf565b612557565b60405161046d929190614422565b348015610c7357600080fd5b50610496610c82366004613967565b612584565b348015610c9357600080fd5b50610496610ca2366004613c13565b612645565b601454600160a01b900460ff1681565b610cbf612674565b6001600160a01b0316610cd0611b14565b6001600160a01b031614610cff5760405162461bcd60e51b8152600401610cf69061416e565b60405180910390fd5b6001600160a01b03166000908152601860205260409020805460ff19169055565b606060038054610d2f90614535565b80601f0160208091040260200160405190810160405280929190818152602001828054610d5b90614535565b8015610da85780601f10610d7d57610100808354040283529160200191610da8565b820191906000526020600020905b815481529060010190602001808311610d8b57829003601f168201915b5050505050905090565b6014546001600160a01b03163314610ddc5760405162461bcd60e51b8152600401610cf690613f0c565b600680546005805461ffff60b01b1916601960b21b1761ffff60c01b1916601960c31b176001600160f01b0316601960f21b1761ffff60d01b1916601960d31b1761ffff60e01b1916604b60e21b17905561019065ffff000000001990911665012c000000001761ffff19161763ffff000019166302580000179055565b6000610e6e610e67612674565b8484612678565b5060015b92915050565b60025490565b7f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a86681565b6000610eaf84848461272c565b6001600160a01b038416600090815260016020526040812081610ed0612674565b6001600160a01b03166001600160a01b0316815260200190815260200160002054905082811015610f135760405162461bcd60e51b8152600401610cf690614126565b610f2e85610f1f612674565b610f2986856144f9565b612678565b506001949350505050565b600f546001600160a01b031681565b601a8054610f5590614535565b80601f0160208091040260200160405190810160405280929190818152602001828054610f8190614535565b8015610fce5780601f10610fa357610100808354040283529160200191610fce565b820191906000526020600020905b815481529060010190602001808311610fb157829003601f168201915b505050505081565b6014546001600160a01b031633146110005760405162461bcd60e51b8152600401610cf690613f0c565b6001600160a01b03811661101357600080fd5b601480546001600160a01b0319166001600160a01b0392909216919091179055565b61103d612674565b6001600160a01b031661104e611b14565b6001600160a01b0316146110745760405162461bcd60e51b8152600401610cf69061416e565b6001600160a01b03166000908152601860205260409020805460ff19166001179055565b601290565b6b204fce5e3e2502611000000081565b6000610e6e6110ba612674565b8484600160006110c8612674565b6001600160a01b03908116825260208083019390935260409182016000908120918b1681529252902054610f29919061446c565b60075481565b6001600160a01b0381166000908152601f60205260409020545b919050565b601e6020526000908152604090205481565b61113b612674565b6001600160a01b031661114c611b14565b6001600160a01b0316146111725760405162461bcd60e51b8152600401610cf69061416e565b60055461ffff600160a01b9091048116908216111561119057600080fd5b61ffff16600755565b336000908152601f60205260409020544210156111c85760405162461bcd60e51b8152600401610cf690613ffe565b6111d1306116ff565b600954116113f85760006111e433612404565b9050600081116112065760405162461bcd60e51b8152600401610cf6906140c2565b600060208361ffff168154811061122d57634e487b7160e01b600052603260045260246000fd5b906000526020600020906002020190508261ffff166000141561125a576112543383612044565b5061138b565b8261ffff16600114156112fb5760105461127f9030906001600160a01b031684612678565b6010546001600160a01b031663791ac94783600060018501336112a44261012c612daf565b6040518663ffffffff1660e01b81526004016112c49594939291906143b1565b600060405180830381600087803b1580156112de57600080fd5b505af11580156112f2573d6000803e3d6000fd5b5050505061138b565b6010546113139030906001600160a01b031684612678565b6010546001600160a01b0316635c11d79583600060018501336113384261012c612daf565b6040518663ffffffff1660e01b81526004016113589594939291906143b1565b600060405180830381600087803b15801561137257600080fd5b505af1158015611386573d6000803e3d6000fd5b505050505b336000908152601d60205260409020546113a59083612daf565b336000908152601d6020908152604080832093909355600a54601e909152919020556009546113d49083612dbb565b600955600e546113e5904290612daf565b336000908152601f602052604090205550505b50565b6014546001600160a01b031633146114255760405162461bcd60e51b8152600401610cf690613f0c565b61142d612dc7565b565b6001600160a01b031660009081526015602052604090205460ff1690565b6014546001600160a01b031690565b6001600160a01b039081166000908152602160205260409020541690565b6113f83382613042565b600c5481565b6001600160a01b031660009081526018602052604090205460ff1690565b600b5481565b6014546001600160a01b031633146114d85760405162461bcd60e51b8152600401610cf690613f0c565b60055460065460009161ffff600160b01b82048116926115049290821691600160d01b90910416614446565b61150e9190614446565b61ffff1690506000479050600061153a83611534600b54856130d790919063ffffffff16565b906130e3565b9050600061155784611534600c54866130d790919063ffffffff16565b9050600061157485611534600d54876130d790919063ffffffff16565b6012549091506001600160a01b03166108fc611590838661446c565b6040518115909202916000818181858888f193505050501580156115b8573d6000803e3d6000fd5b506013546040516001600160a01b039091169083156108fc029084906000818181858888f193505050501580156115f3573d6000803e3d6000fd5b505050505050565b6001600160a01b031660009081526016602052604090205460ff1690565b6014546001600160a01b031633146116435760405162461bcd60e51b8152600401610cf690613f0c565b6101906007819055600855565b611658612674565b6001600160a01b0316611669611b14565b6001600160a01b03161461168f5760405162461bcd60e51b8152600401610cf69061416e565b60af81101580156116a257506127108111155b6116be5760405162461bcd60e51b8152600401610cf690613ecb565b600855565b600d5481565b6001600160a01b031660009081526017602052604090205460ff1690565b60236020526000908152604090205463ffffffff1681565b6001600160a01b031660009081526020819052604090205490565b611722612674565b6001600160a01b0316611733611b14565b6001600160a01b0316146117595760405162461bcd60e51b8152600401610cf69061416e565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b6010546001600160a01b031681565b60085481565b6012546001600160a01b031681565b60004382106117e85760405162461bcd60e51b8152600401610cf6906142b1565b6001600160a01b03831660009081526023602052604090205463ffffffff1680611816576000915050610e72565b6001600160a01b0384166000908152602260205260408120849161183b600185614510565b63ffffffff908116825260208201929092526040016000205416116118a4576001600160a01b03841660009081526022602052604081209061187e600184614510565b63ffffffff1663ffffffff16815260200190815260200160002060010154915050610e72565b6001600160a01b038416600090815260226020908152604080832083805290915290205463ffffffff168310156118df576000915050610e72565b6000806118ed600184614510565b90505b8163ffffffff168163ffffffff1611156119b557600060026119128484614510565b61191c91906144b7565b6119269083614510565b6001600160a01b038816600090815260226020908152604080832063ffffffff808616855290835292819020815180830190925280549093168082526001909301549181019190915291925087141561198957602001519450610e729350505050565b805163ffffffff168711156119a0578193506119ae565b6119ab600183614510565b92505b50506118f0565b506001600160a01b038516600090815260226020908152604080832063ffffffff9094168352929052206001015491505092915050565b60246020526000908152604090205481565b6014546001600160a01b03163314611a285760405162461bcd60e51b8152600401610cf690613f0c565b6127106007819055600855565b6014546001600160a01b03163314611a5f5760405162461bcd60e51b8152600401610cf690613f0c565b604080518082019091526001600160a01b03828116825260208083018581528154600181018355600083905284517fc97bfaf2f8ee708c303a06d134f5ecd8389ae0432af62dc132a24118292866bb600290920291820180546001600160a01b0319169190951617845590518051611b00937fc97bfaf2f8ee708c303a06d134f5ecd8389ae0432af62dc132a24118292866bc909301929190910190613810565b5050505050565b601b8054610f5590614535565b6005546001600160a01b031690565b6013546001600160a01b031681565b611b3a612674565b6001600160a01b0316611b4b611b14565b6001600160a01b031614611b715760405162461bcd60e51b8152600401610cf69061416e565b601080546001600160a01b0319166001600160a01b0383811691909117918290556040805163c45a015560e01b81529051929091169163c45a015591600480820192602092909190829003018186803b158015611bcd57600080fd5b505afa158015611be1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c059190613983565b6001600160a01b031663e6a4390530601060009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015611c6257600080fd5b505afa158015611c76573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c9a9190613983565b6040518363ffffffff1660e01b8152600401611cb7929190613cba565b60206040518083038186803b158015611ccf57600080fd5b505afa158015611ce3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d079190613983565b601180546001600160a01b0319166001600160a01b039283161790819055166113f857600080fd5b606060048054610d2f90614535565b60095481565b611d4c612674565b6001600160a01b0316611d5d611b14565b6001600160a01b031614611d835760405162461bcd60e51b8152600401610cf69061416e565b611d8d82826130ef565b5050565b6014546001600160a01b03163314611dbb5760405162461bcd60e51b8152600401610cf690613f0c565b60148054911515600160a01b0260ff60a01b19909216919091179055565b601c8054610f5590614535565b60008060016000611df5612674565b6001600160a01b0390811682526020808301939093526040918201600090812091881681529252902054905082811015611e415760405162461bcd60e51b8152600401610cf6906142fc565b611e57611e4c612674565b85610f2986856144f9565b5060019392505050565b600e5481565b6014546001600160a01b03163314611e915760405162461bcd60e51b8152600401610cf690613f0c565b600060208460ff1681548110611eb757634e487b7160e01b600052603260045260246000fd5b9060005260206000209060020201905082816001019080519060200190611edf929190613810565b5080546001600160a01b0319166001600160a01b03929092169190911790555050565b611f0a612674565b6001600160a01b0316611f1b611b14565b6001600160a01b031614611f415760405162461bcd60e51b8152600401610cf69061416e565b600554600160a01b900461ffff1682611f5a868b614446565b611f649190614446565b61ffff161115611f865760405162461bcd60e51b8152600401610cf690614229565b600680546005805461ffff60b01b1916600160b01b61ffff9b8c16021761ffff60c01b1916600160c01b998b1699909902989098176001600160f01b0316600160f01b978a16979097029690961761ffff60d01b1916600160d01b958916959095029490941761ffff60e01b1916600160e01b938816939093029290921790945565ffff0000000019909216640100000000958516959095029490941761ffff19169183169190911763ffff00001916620100009190921602179055565b6000610e6e612051612674565b848461272c565b6001600160a01b03811660009081526023602052604081205463ffffffff16806120835760006120c6565b6001600160a01b0383166000908152602260205260408120906120a7600184614510565b63ffffffff1663ffffffff168152602001908152602001600020600101545b9392505050565b60007f8cad95687ba82c2ce50e74f7b754645e5117c3a5bec8151c0726d5857980a8666120f8610d20565b805190602001206121076131d5565b3060405160200161211b9493929190613d0c565b60405160208183030381529060405280519060200120905060007fe48329057bfd03d55e49b547132e39cffd9c1820ad7b9d4c5307691425d15adf88888860405160200161216c9493929190613ce8565b60405160208183030381529060405280519060200120905060008282604051602001612199929190613c8b565b6040516020818303038152906040528051906020012090506000600182888888604051600081526020016040526040516121d69493929190613d30565b6020604051602081039080840390855afa1580156121f8573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b03811661222b5760405162461bcd60e51b8152600401610cf690613fb7565b6001600160a01b038116600090815260246020526040812080549161224f83614570565b9190505589146122715760405162461bcd60e51b8152600401610cf690613da1565b874211156122915760405162461bcd60e51b8152600401610cf69061407b565b61229b818b613042565b50505050505050505050565b602081815481106122b757600080fd5b60009182526020909120600290910201546001600160a01b0316905081565b6011546001600160a01b031681565b601d6020526000908152604090205481565b6122ff612674565b6001600160a01b0316612310611b14565b6001600160a01b0316146123365760405162461bcd60e51b8152600401610cf69061416e565b6019805461ff0019166101001790556014805460ff60a01b1916600160a01b179055565b6014546001600160a01b031633146123845760405162461bcd60e51b8152600401610cf690613f0c565b6001600160a01b03919091166000908152601760205260409020805460ff1916911515919091179055565b6014546001600160a01b031633146123d95760405162461bcd60e51b8152600401610cf690613f0c565b6001600160a01b03919091166000908152601660205260409020805460ff1916911515919091179055565b600080612410836116ff565b9050600061241c6131d9565b90508061242e5760009250505061111c565b6001600160a01b0384166000908152601e6020526040812054600a5461245391612dbb565b9050801561249057600061246b8361153484876130d7565b90506009548111156124855760095494505050505061111c565b935061111c92505050565b506000949350505050565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b600a5481565b6014546001600160a01b031633146124f65760405162461bcd60e51b8152600401610cf690613f0c565b6001600160a01b03919091166000908152601560205260409020805460ff1916911515919091179055565b601f6020526000908152604090205481565b7fe48329057bfd03d55e49b547132e39cffd9c1820ad7b9d4c5307691425d15adf81565b60226020908152600092835260408084209091529082529020805460019091015463ffffffff9091169082565b61258c612674565b6001600160a01b031661259d611b14565b6001600160a01b0316146125c35760405162461bcd60e51b8152600401610cf69061416e565b6001600160a01b0381166125e95760405162461bcd60e51b8152600401610cf690613f2f565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6014546001600160a01b0316331461266f5760405162461bcd60e51b8152600401610cf690613f0c565b600e55565b3390565b6001600160a01b03831661269e5760405162461bcd60e51b8152600401610cf69061424a565b6001600160a01b0382166126c45760405162461bcd60e51b8152600401610cf690613f75565b6001600160a01b0380841660008181526001602090815260408083209487168084529490915290819020849055517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259061271f908590613cdf565b60405180910390a3505050565b601954610100900460ff168061275a5750612745611b14565b6001600160a01b0316836001600160a01b0316145b8061277d5750612768611b14565b6001600160a01b0316826001600160a01b0316145b8061279557506010546001600160a01b038481169116145b6127b15760405162461bcd60e51b8152600401610cf69061428e565b6001600160a01b03831660009081526018602052604090205460ff16806127f057506001600160a01b03821660009081526018602052604090205460ff165b156128175760195460ff166128175760405162461bcd60e51b8152600401610cf6906140ef565b601454600160a01b900460ff161515600114801561283f5750601354600160a01b900460ff16155b801561285557506010546001600160a01b031615155b801561286b57506011546001600160a01b031615155b801561288557506011546001600160a01b03848116911614155b801561289f57506010546001600160a01b03848116911614155b80156128c457506128ae611b14565b6001600160a01b0316836001600160a01b031614155b80156128d957506001600160a01b0383163014155b156128e6576128e6612dc7565b600554600854600091600160a01b900461ffff1690612903610e78565b61290d91906144da565b61291791906144a3565b90506000600560149054906101000a900461ffff1661ffff1660075461293b610e78565b61294591906144da565b61294f91906144a3565b9050808311158061297857506001600160a01b03851660009081526016602052604090205460ff165b6129945760405162461bcd60e51b8152600401610cf690613e27565b61299c611b14565b6001600160a01b0316856001600160a01b0316141580156129c657506001600160a01b0384163014155b80156129e05750600f546001600160a01b03858116911614155b80156129fa57506011546001600160a01b03858116911614155b15612a5b576000612a0a856116ff565b6001600160a01b03861660009081526017602052604090205490915060ff1680612a3d575082612a3a858361446c565b11155b612a595760405162461bcd60e51b8152600401610cf690613e94565b505b6001600160a01b03851660009081526015602052604090205460ff1615612a8c57612a87858585613210565b611b00565b600554600090612ab69061ffff600160a01b8204811691611534918891600160b01b9004166130d7565b600554909150600090612ae39061ffff600160a01b8204811691611534918991600160c01b9004166130d7565b600554909150600090612b109061ffff600160a01b8204811691611534918a91600160f01b9004166130d7565b600554909150600090612b3d9061ffff600160a01b8204811691611534918b91600160d01b9004166130d7565b600554909150600090612b6a9061ffff600160a01b8204811691611534918c91600160e01b9004166130d7565b600554600654919250600091612b949161ffff600160a01b909104811691611534918d91166130d7565b600554600654919250600091612bc49161ffff600160a01b909104811691611534918e91620100009004166130d7565b600554600654919250600091612bf69161ffff600160a01b909104811691611534918f916401000000009004166130d7565b90506000818386612c078a8c61446c565b612c11919061446c565b612c1b919061446c565b612c25919061446c565b90506000828588612c368b8e61446c565b612c40919061446c565b612c4a919061446c565b612c54919061446c565b6011549091506001600160a01b038f811691161415612cf057612c768f6116ff565b8d1415612c8857612c888f6000613338565b612c928d83612dbb565b9c50612c9f8f8f8f613210565b612caa8f308b613210565b612cca8f600f60009054906101000a90046001600160a01b03168a613210565b612cd58f3088613210565b612ce08f3086613210565b612ceb8f3085613210565b612d7e565b612cfa8d82612dbb565b9c50612d078f8f8f613210565b612d128f308c613210565b612d328f600f60009054906101000a90046001600160a01b03168a613210565b612d3d8f3089613210565b612d488f3087613210565b612d538f3085613210565b612d5c8e611102565b612d7e57612d7e8e612d79600e5442612daf90919063ffffffff16565b613338565b600954612d8b9084612daf565b600955600a54612d9b9084612daf565b600a55505050505050505050505050505050565b60006120c6828461446c565b60006120c682846144f9565b6013805460ff60a01b1916600160a01b17905560058054600680546001600160b01b03831690935565ffffffffffff198316905561ffff600160b01b8204811692600160c01b8304821692600160f01b8104831692600160d01b8204811692600160e01b909204811691808216916201000082048116916401000000009004166000612e52306116ff565b90506000600d54600c54600b54612e69919061446c565b612e73919061446c565b9050600954821115612f7757600954612e8d908390612dbb565b9150612e9882613354565b60004790506000612eb883611534600b54856130d790919063ffffffff16565b90506000612ed584611534600c54866130d790919063ffffffff16565b90506000612ef285611534600d54876130d790919063ffffffff16565b6012549091506001600160a01b03166108fc612f0e838661446c565b6040518115909202916000818181858888f19350505050158015612f36573d6000803e3d6000fd5b506013546040516001600160a01b039091169083156108fc029084906000818181858888f19350505050158015612f71573d6000803e3d6000fd5b50505050505b50506005805461ffff60b01b1916600160b01b61ffff9a8b16021761ffff60c01b1916600160c01b988a1698909802979097176001600160f01b0316600160f01b968916969096029590951761ffff60d01b1916600160d01b948816949094029390931761ffff60e01b1916600160e01b92871692909202919091179093556006805461ffff19169385169390931763ffff0000191662010000918516919091021765ffff00000000191664010000000091909316029190911790556013805460ff60a01b19169055565b6001600160a01b0380831660009081526021602052604081205490911690613069846116ff565b6001600160a01b0385811660008181526021602052604080822080546001600160a01b031916898616908117909155905194955093928616927f3134e8a2e6d97e929a7e54011ea5485d7d196dd5f0ba4d4ef95803e8e3fc257f9190a46130d18284836134db565b50505050565b60006120c682846144da565b60006120c682846144a3565b6001600160a01b0382166131155760405162461bcd60e51b8152600401610cf6906141a3565b6131218260008361363a565b6001600160a01b0382166000908152602081905260409020548181101561315a5760405162461bcd60e51b8152600401610cf690613e52565b61316482826144f9565b6001600160a01b038416600090815260208190526040812091909155600280548492906131929084906144f9565b90915550506040516000906001600160a01b038516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9061271f908690613cdf565b4690565b60115460009081906131f3906001600160a01b03166116ff565b9050600061320982613203610e78565b90612dbb565b9250505090565b6001600160a01b0383166132365760405162461bcd60e51b8152600401610cf6906141e4565b6001600160a01b03821661325c5760405162461bcd60e51b8152600401610cf690613de4565b61326783838361363a565b6001600160a01b038316600090815260208190526040902054818110156132a05760405162461bcd60e51b8152600401610cf690614035565b6132aa82826144f9565b6001600160a01b0380861660009081526020819052604080822093909355908516815290812080548492906132e090849061446c565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161332a9190613cdf565b60405180910390a350505050565b6001600160a01b039091166000908152601f6020526040902055565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061339757634e487b7160e01b600052603260045260246000fd5b6001600160a01b03928316602091820292909201810191909152601054604080516315ab88c960e31b81529051919093169263ad5c4648926004808301939192829003018186803b1580156133eb57600080fd5b505afa1580156133ff573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134239190613983565b8160018151811061344457634e487b7160e01b600052603260045260246000fd5b6001600160a01b03928316602091820292909201015260105461346a9130911684612678565b6010546001600160a01b031663791ac947836000843061348d426201518061446c565b6040518663ffffffff1660e01b81526004016134ad959493929190614341565b600060405180830381600087803b1580156134c757600080fd5b505af11580156115f3573d6000803e3d6000fd5b816001600160a01b0316836001600160a01b0316141580156134fd5750600081115b1561363a576001600160a01b038316156135a0576001600160a01b03831660009081526023602052604081205463ffffffff16908161353d576000613580565b6001600160a01b038516600090815260226020526040812090613561600185614510565b63ffffffff1663ffffffff168152602001908152602001600020600101545b9050600061358e8285612dbb565b905061359c8684848461363f565b5050505b6001600160a01b0382161561363a576001600160a01b03821660009081526023602052604081205463ffffffff1690816135db57600061361e565b6001600160a01b0384166000908152602260205260408120906135ff600185614510565b63ffffffff1663ffffffff168152602001908152602001600020600101545b9050600061362c8285612daf565b90506115f38584848461363f565b505050565b6000613663436040518060600160405280603581526020016145e3603591396137e0565b905060008463ffffffff161180156136bd57506001600160a01b038516600090815260226020526040812063ffffffff8316916136a1600188614510565b63ffffffff908116825260208201929092526040016000205416145b15613706576001600160a01b038516600090815260226020526040812083916136e7600188614510565b63ffffffff168152602081019190915260400160002060010155613796565b60408051808201825263ffffffff838116825260208083018681526001600160a01b038a166000908152602283528581208a851682529092529390209151825463ffffffff191691161781559051600191820155613765908590614484565b6001600160a01b0386166000908152602360205260409020805463ffffffff191663ffffffff929092169190911790555b846001600160a01b03167fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a72484846040516137d1929190614403565b60405180910390a25050505050565b60008164010000000084106138085760405162461bcd60e51b8152600401610cf69190613d4e565b509192915050565b828054828255906000526020600020908101928215613865579160200282015b8281111561386557825182546001600160a01b0319166001600160a01b03909116178255602090920191600190910190613830565b50613871929150613875565b5090565b5b808211156138715760008155600101613876565b803561111c816145cd565b600082601f8301126138a5578081fd5b8135602067ffffffffffffffff808311156138c2576138c26145b7565b818302604051838282010181811084821117156138e1576138e16145b7565b604052848152838101925086840182880185018910156138ff578687fd5b8692505b85831015613928576139148161388a565b845292840192600192909201918401613903565b50979650505050505050565b8035801515811461111c57600080fd5b803561ffff8116811461111c57600080fd5b803560ff8116811461111c57600080fd5b600060208284031215613978578081fd5b81356120c6816145cd565b600060208284031215613994578081fd5b81516120c6816145cd565b600080604083850312156139b1578081fd5b82356139bc816145cd565b915060208301356139cc816145cd565b809150509250929050565b6000806000606084860312156139eb578081fd5b83356139f6816145cd565b92506020840135613a06816145cd565b929592945050506040919091013590565b60008060408385031215613a29578182fd5b8235613a34816145cd565b9150613a4260208401613934565b90509250929050565b60008060408385031215613a5d578182fd5b8235613a68816145cd565b946020939093013593505050565b60008060008060008060c08789031215613a8e578182fd5b8635613a99816145cd565b95506020870135945060408701359350613ab560608801613956565b92506080870135915060a087013590509295509295509295565b60008060408385031215613ae1578182fd5b8235613aec816145cd565b9150602083013563ffffffff811681146139cc578182fd5b60008060408385031215613b16578182fd5b823567ffffffffffffffff811115613b2c578283fd5b613b3885828601613895565b92505060208301356139cc816145cd565b600060208284031215613b5a578081fd5b6120c682613934565b600060208284031215613b74578081fd5b6120c682613944565b600080600080600080600080610100898b031215613b99578182fd5b613ba289613944565b9750613bb060208a01613944565b9650613bbe60408a01613944565b9550613bcc60608a01613944565b9450613bda60808a01613944565b9350613be860a08a01613944565b9250613bf660c08a01613944565b9150613c0460e08a01613944565b90509295985092959890939650565b600060208284031215613c24578081fd5b5035919050565b600080600060608486031215613c3f578081fd5b613c4884613956565b9250602084013567ffffffffffffffff811115613c63578182fd5b613c6f86828701613895565b9250506040840135613c80816145cd565b809150509250925092565b61190160f01b81526002810192909252602282015260420190565b6001600160a01b0391909116815260200190565b6001600160a01b0392831681529116602082015260400190565b901515815260200190565b90815260200190565b9384526001600160a01b039290921660208401526040830152606082015260800190565b938452602084019290925260408301526001600160a01b0316606082015260800190565b93845260ff9290921660208401526040830152606082015260800190565b6000602080835283518082850152825b81811015613d7a57858101830151858201604001528201613d5e565b81811115613d8b5783604083870101525b50601f01601f1916929092016040019392505050565b60208082526023908201527f56455253453a3a64656c656761746542795369673a20696e76616c6964206e6f6040820152626e636560e81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b602080825260119082015270151608131a5b5a5d08115e18d959591959607a1b604082015260600190565b60208082526022908201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604082015261636560f01b606082015260800190565b60208082526019908201527f4d61782057616c6c6574204c696d697420457863656564656400000000000000604082015260600190565b60208082526021908201527f425053206d757374206265206265747765656e2031373520616e6420313030306040820152600360fc1b606082015260800190565b60208082526009908201526810b7b832b930ba37b960b91b604082015260600190565b60208082526026908201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160408201526564647265737360d01b606082015260800190565b60208082526022908201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604082015261737360f01b606082015260800190565b60208082526027908201527f56455253453a3a64656c656761746542795369673a20696e76616c6964207369604082015266676e617475726560c81b606082015260800190565b6020808252601d908201527f77697468647261772074696d657374616d70203a206e6f7420676f6f64000000604082015260600190565b60208082526026908201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604082015265616c616e636560d01b606082015260800190565b60208082526027908201527f56455253453a3a64656c656761746542795369673a207369676e617475726520604082015266195e1c1a5c995960ca1b606082015260800190565b6020808252601390820152726e6f7420656e6f75676820746f20636c61696d60681b604082015260600190565b6020808252601b908201527f626f7473206172656e7420616c6c6f77656420746f2074726164650000000000604082015260600190565b60208082526028908201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616040820152676c6c6f77616e636560c01b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526021908201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736040820152607360f81b606082015260800190565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b6020808252600790820152662176616c75657360c81b604082015260600190565b60208082526024908201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646040820152637265737360e01b606082015260800190565b602080825260099082015268217472616461626c6560b81b604082015260600190565b6020808252602b908201527f42455456455253453a3a6765745072696f72566f7465733a206e6f742079657460408201526a0819195d195c9b5a5b995960aa1b606082015260800190565b60208082526025908201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604082015264207a65726f60d81b606082015260800190565b600060a082018783526020878185015260a0604085015281875180845260c0860191508289019350845b818110156143905784516001600160a01b03168352938301939183019160010161436b565b50506001600160a01b03969096166060850152505050608001529392505050565b600060a082018783526020878185015260a0604085015281875480845260c0860191508885528285209350845b818110156143905784546001600160a01b0316835260019485019492840192016143de565b918252602082015260400190565b63ffffffff91909116815260200190565b63ffffffff929092168252602082015260400190565b60ff91909116815260200190565b600061ffff8083168185168083038211156144635761446361458b565b01949350505050565b6000821982111561447f5761447f61458b565b500190565b600063ffffffff8083168185168083038211156144635761446361458b565b6000826144b2576144b26145a1565b500490565b600063ffffffff808416806144ce576144ce6145a1565b92169190910492915050565b60008160001904831182151516156144f4576144f461458b565b500290565b60008282101561450b5761450b61458b565b500390565b600063ffffffff8381169083168181101561452d5761452d61458b565b039392505050565b60028104600182168061454957607f821691505b6020821081141561456a57634e487b7160e01b600052602260045260246000fd5b50919050565b60006000198214156145845761458461458b565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b03811681146113f857600080fdfe56455253453a3a5f7772697465436865636b706f696e743a20626c6f636b206e756d62657220657863656564732033322062697473a2646970667358221220d3a00e7ae0fb448e575a20e9240aab8a4110f4527ad297ff4fa141aec07086ba64736f6c63430008000033

Deployed Bytecode Sourcemap

46138:28622:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47642:42;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;61482:113;;;;;;;;;;-1:-1:-1;61482:113:0;;;;;:::i;:::-;;:::i;:::-;;16867:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;60357:332::-;;;;;;;;;;;;;:::i;19175:210::-;;;;;;;;;;-1:-1:-1;19175:210:0;;;;;:::i;:::-;;:::i;17987:108::-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;66789:155::-;;;;;;;;;;;;;:::i;19867:493::-;;;;;;;;;;-1:-1:-1;19867:493:0;;;;;:::i;:::-;;:::i;47095:71::-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;48004:55::-;;;;;;;;;;;;;:::i;56332:154::-;;;;;;;;;;-1:-1:-1;56332:154:0;;;;;:::i;:::-;;:::i;61361:109::-;;;;;;;;;;-1:-1:-1;61361:109:0;;;;;:::i;:::-;;:::i;17829:93::-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;46269:55::-;;;;;;;;;;;;;:::i;20769:297::-;;;;;;;;;;-1:-1:-1;20769:297:0;;;;;:::i;:::-;;:::i;46751:42::-;;;;;;;;;;;;;:::i;56008:164::-;;;;;;;;;;-1:-1:-1;56008:164:0;;;;;:::i;:::-;;:::i;48368:53::-;;;;;;;;;;-1:-1:-1;48368:53:0;;;;;:::i;:::-;;:::i;60996:229::-;;;;;;;;;;-1:-1:-1;60996:229:0;;;;;:::i;:::-;;:::i;62955:1867::-;;;;;;;;;;-1:-1:-1;62955:1867:0;;;;;:::i;:::-;;:::i;57178:80::-;;;;;;;;;;;;;:::i;61736:122::-;;;;;;;;;;-1:-1:-1;61736:122:0;;;;;:::i;:::-;;:::i;50989:85::-;;;;;;;;;;;;;:::i;67888:117::-;;;;;;;;;;-1:-1:-1;67888:117:0;;;;;:::i;:::-;;:::i;68153:104::-;;;;;;;;;;-1:-1:-1;68153:104:0;;;;;:::i;:::-;;:::i;46960:31::-;;;;;;;;;;;;;:::i;61607:121::-;;;;;;;;;;-1:-1:-1;61607:121:0;;;;;:::i;:::-;;:::i;46916:37::-;;;;;;;;;;;;;:::i;57266:601::-;;;;;;;;;;;;;:::i;62114:126::-;;;;;;;;;;-1:-1:-1;62114:126:0;;;;;:::i;:::-;;:::i;60697:141::-;;;;;;;;;;;;;:::i;62733:214::-;;;;;;;;;;-1:-1:-1;62733:214:0;;;;;:::i;:::-;;:::i;46998:33::-;;;;;;;;;;;;;:::i;62557:168::-;;;;;;;;;;-1:-1:-1;62557:168:0;;;;;:::i;:::-;;:::i;66668:48::-;;;;;;;;;;-1:-1:-1;66668:48:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;18158:177::-;;;;;;;;;;-1:-1:-1;18158:177:0;;;;;:::i;:::-;;:::i;3298:148::-;;;;;;;;;;;;;:::i;47175:39::-;;;;;;;;;;;;;:::i;46800:33::-;;;;;;;;;;;;;:::i;47281:75::-;;;;;;;;;;;;;:::i;70706:1297::-;;;;;;;;;;-1:-1:-1;70706:1297:0;;;;;:::i;:::-;;:::i;67245:41::-;;;;;;;;;;-1:-1:-1;67245:41:0;;;;;:::i;:::-;;:::i;60847:141::-;;;;;;;;;;;;;:::i;65760:197::-;;;;;;;;;;-1:-1:-1;65760:197:0;;;;;:::i;:::-;;:::i;48066:59::-;;;;;;;;;;;;;:::i;2647:87::-;;;;;;;;;;;;;:::i;47363:69::-;;;;;;;;;;;;;:::i;56601:319::-;;;;;;;;;;-1:-1:-1;56601:319:0;;;;;:::i;:::-;;:::i;17086:104::-;;;;;;;;;;;;;:::i;46840:29::-;;;;;;;;;;;;;:::i;51170:103::-;;;;;;;;;;-1:-1:-1;51170:103:0;;;;;:::i;:::-;;:::i;57046:124::-;;;;;;;;;;-1:-1:-1;57046:124:0;;;;;:::i;:::-;;:::i;48132:55::-;;;;;;;;;;;;;:::i;21569:446::-;;;;;;;;;;-1:-1:-1;21569:446:0;;;;;:::i;:::-;;:::i;47040:46::-;;;;;;;;;;;;;:::i;65965:266::-;;;;;;;;;;-1:-1:-1;65965:266:0;;;;;:::i;:::-;;:::i;59501:848::-;;;;;;;;;;-1:-1:-1;59501:848:0;;;;;:::i;:::-;;:::i;18548:216::-;;;;;;;;;;-1:-1:-1;18548:216:0;;;;;:::i;:::-;;:::i;70039:236::-;;;;;;;;;;-1:-1:-1;70039:236:0;;;;;:::i;:::-;;:::i;68691:1147::-;;;;;;;;;;-1:-1:-1;68691:1147:0;;;;;:::i;:::-;;:::i;48586:27::-;;;;;;;;;;-1:-1:-1;48586:27:0;;;;;:::i;:::-;;:::i;47246:26::-;;;;;;;;;;;;;:::i;48293:42::-;;;;;;;;;;-1:-1:-1;48293:42:0;;;;;:::i;:::-;;:::i;61233:120::-;;;;;;;;;;;;;:::i;62381:168::-;;;;;;;;;;-1:-1:-1;62381:168:0;;;;;:::i;:::-;;:::i;62248:125::-;;;;;;;;;;-1:-1:-1;62248:125:0;;;;;:::i;:::-;;:::i;64830:693::-;;;;;;;;;;-1:-1:-1;64830:693:0;;;;;:::i;:::-;;:::i;18827:201::-;;;;;;;;;;-1:-1:-1;18827:201:0;;;;;:::i;:::-;;:::i;46876:33::-;;;;;;;;;;;;;:::i;61985:121::-;;;;;;;;;;-1:-1:-1;61985:121:0;;;;;:::i;:::-;;:::i;48470:62::-;;;;;;;;;;-1:-1:-1;48470:62:0;;;;;:::i;:::-;;:::i;67038:126::-;;;;;;;;;;;;;:::i;66531:68::-;;;;;;;;;;-1:-1:-1;66531:68:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;;:::i;3601:281::-;;;;;;;;;;-1:-1:-1;3601:281:0;;;;;:::i;:::-;;:::i;61866:111::-;;;;;;;;;;-1:-1:-1;61866:111:0;;;;;:::i;:::-;;:::i;47642:42::-;;;-1:-1:-1;;;47642:42:0;;;;;:::o;61482:113::-;2878:12;:10;:12::i;:::-;-1:-1:-1;;;;;2867:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;2867:23:0;;2859:68;;;;-1:-1:-1;;;2859:68:0;;;;;;;:::i;:::-;;;;;;;;;-1:-1:-1;;;;;61558:21:0::1;61582:5;61558:21:::0;;;:10:::1;:21;::::0;;;;:29;;-1:-1:-1;;61558:29:0::1;::::0;;61482:113::o;16867:100::-;16921:13;16954:5;16947:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16867:100;:::o;60357:332::-;48665:9;;-1:-1:-1;;;;;48665:9:0;48678:10;48665:23;48657:45;;;;-1:-1:-1;;;48657:45:0;;;;;;;:::i;:::-;60421:26:::1;:32:::0;;60464:17:::1;:23:::0;;-1:-1:-1;;;;60464:23:0::1;-1:-1:-1::0;;;60464:23:0::1;-1:-1:-1::0;;;;60498:27:0::1;-1:-1:-1::0;;;60498:27:0::1;-1:-1:-1::0;;;;;60536:17:0::1;-1:-1:-1::0;;;60536:17:0::1;-1:-1:-1::0;;;;60564:16:0::1;-1:-1:-1::0;;;60564:16:0::1;-1:-1:-1::0;;;;60591:20:0::1;-1:-1:-1::0;;;60591:20:0::1;::::0;;60641:3:::1;-1:-1:-1::0;;60421:32:0;;::::1;::::0;::::1;-1:-1:-1::0;;60622:22:0::1;;-1:-1:-1::0;;60655:26:0::1;::::0;::::1;::::0;;60357:332::o;19175:210::-;19294:4;19316:39;19325:12;:10;:12::i;:::-;19339:7;19348:6;19316:8;:39::i;:::-;-1:-1:-1;19373:4:0;19175:210;;;;;:::o;17987:108::-;18075:12;;17987:108;:::o;66789:155::-;66840:104;66789:155;:::o;19867:493::-;20007:4;20024:36;20034:6;20042:9;20053:6;20024:9;:36::i;:::-;-1:-1:-1;;;;;20100:19:0;;20073:24;20100:19;;;:11;:19;;;;;20073:24;20120:12;:10;:12::i;:::-;-1:-1:-1;;;;;20100:33:0;-1:-1:-1;;;;;20100:33:0;;;;;;;;;;;;;20073:60;;20186:6;20166:16;:26;;20144:116;;;;-1:-1:-1;;;20144:116:0;;;;;;;:::i;:::-;20271:57;20280:6;20288:12;:10;:12::i;:::-;20302:25;20321:6;20302:16;:25;:::i;:::-;20271:8;:57::i;:::-;-1:-1:-1;20348:4:0;;19867:493;-1:-1:-1;;;;19867:493:0:o;47095:71::-;;;-1:-1:-1;;;;;47095:71:0;;:::o;48004:55::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;56332:154::-;48665:9;;-1:-1:-1;;;;;48665:9:0;48678:10;48665:23;48657:45;;;;-1:-1:-1;;;48657:45:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;56418:25:0;::::1;56410:34;;;::::0;::::1;;56455:9;:23:::0;;-1:-1:-1;;;;;;56455:23:0::1;-1:-1:-1::0;;;;;56455:23:0;;;::::1;::::0;;;::::1;::::0;;56332:154::o;61361:109::-;2878:12;:10;:12::i;:::-;-1:-1:-1;;;;;2867:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;2867:23:0;;2859:68;;;;-1:-1:-1;;;2859:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;61434:21:0::1;;::::0;;;:10:::1;:21;::::0;;;;:28;;-1:-1:-1;;61434:28:0::1;61458:4;61434:28;::::0;;61361:109::o;17829:93::-;17912:2;17829:93;:::o;46269:55::-;46306:18;46269:55;:::o;20769:297::-;20884:4;20906:130;20929:12;:10;:12::i;:::-;20956:7;21015:10;20978:11;:25;20990:12;:10;:12::i;:::-;-1:-1:-1;;;;;20978:25:0;;;;;;;;;;;;;;;;;-1:-1:-1;20978:25:0;;;:34;;;;;;;;;;:47;;;;:::i;46751:42::-;;;;:::o;56008:164::-;-1:-1:-1;;;;;56131:33:0;;56098:7;56131:33;;;:27;:33;;;;;;56008:164;;;;:::o;48368:53::-;;;;;;;;;;;;;:::o;60996:229::-;2878:12;:10;:12::i;:::-;-1:-1:-1;;;;;2867:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;2867:23:0;;2859:68;;;;-1:-1:-1;;;2859:68:0;;;;;;;:::i;:::-;61148:11:::1;::::0;::::1;-1:-1:-1::0;;;61148:11:0;;::::1;::::0;::::1;61122:37:::0;;::::1;;;61114:46;;;::::0;::::1;;61171;;:21;:46:::0;60996:229::o;62955:1867::-;63065:10;63037:39;;;;:27;:39;;;;;;63080:15;-1:-1:-1;63037:58:0;63015:137;;;;-1:-1:-1;;;63015:137:0;;;;;;;:::i;:::-;63185:24;63203:4;63185:9;:24::i;:::-;63167:14;;:42;63163:1652;;63226:20;63249:33;63271:10;63249:21;:33::i;:::-;63226:56;;63320:1;63305:12;:16;63297:48;;;;-1:-1:-1;;;63297:48:0;;;;;;;:::i;:::-;63360:25;63388:5;63394:4;63388:11;;;;;;;;-1:-1:-1;;;63388:11:0;;;;;;;;;;;;;;;;;;;63360:39;;63418:4;:9;;63426:1;63418:9;63414:1093;;;63499:34;63508:10;63520:12;63499:8;:34::i;:::-;;63414:1093;;;63559:4;:9;;63567:1;63559:9;63555:952;;;63660:13;;63628:61;;63645:4;;-1:-1:-1;;;;;63660:13:0;63676:12;63628:8;:61::i;:::-;63708:13;;-1:-1:-1;;;;;63708:13:0;:86;63821:12;63708:13;;63888:15;;63930:10;63967:24;:15;63987:3;63967:19;:24::i;:::-;63708:306;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;63555:952;;;64134:13;;64102:61;;64119:4;;-1:-1:-1;;;;;64134:13:0;64150:12;64102:8;:61::i;:::-;64182:13;;-1:-1:-1;;;;;64182:13:0;:89;64298:12;64182:13;;64365:15;;64407:10;64444:24;:15;64464:3;64444:19;:24::i;:::-;64182:309;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;63555:952;64551:10;64543:19;;;;:7;:19;;;;;;:37;;64567:12;64543:23;:37::i;:::-;64529:10;64521:19;;;;:7;:19;;;;;;;;:59;;;;64628:18;;64595;:30;;;;;;:51;64678:14;;:32;;64697:12;64678:18;:32::i;:::-;64661:14;:49;64787:15;;64767:36;;:15;;:19;:36::i;:::-;64753:10;64725:39;;;;:27;:39;;;;;:78;-1:-1:-1;;63163:1652:0;62955:1867;:::o;57178:80::-;48665:9;;-1:-1:-1;;;;;48665:9:0;48678:10;48665:23;48657:45;;;;-1:-1:-1;;;48657:45:0;;;;;;;:::i;:::-;57233:17:::1;:15;:17::i;:::-;57178:80::o:0;61736:122::-;-1:-1:-1;;;;;61825:25:0;61801:4;61825:25;;;:18;:25;;;;;;;;;61736:122::o;50989:85::-;51057:9;;-1:-1:-1;;;;;51057:9:0;50989:85;:::o;67888:117::-;-1:-1:-1;;;;;67976:21:0;;;67949:7;67976:21;;;:10;:21;;;;;;;;67888:117::o;68153:104::-;68217:32;68227:10;68239:9;68217;:32::i;46960:31::-;;;;:::o;61607:121::-;-1:-1:-1;;;;;61699:21:0;61675:4;61699:21;;;:10;:21;;;;;;;;;61607:121::o;46916:37::-;;;;:::o;57266:601::-;48665:9;;-1:-1:-1;;;;;48665:9:0;48678:10;48665:23;48657:45;;;;-1:-1:-1;;;48657:45:0;;;;;;;:::i;:::-;57409:17:::1;::::0;57377:16:::1;::::0;57325:23:::1;::::0;57409:17:::1;-1:-1:-1::0;;;57409:17:0;::::1;::::0;::::1;::::0;57351:42:::1;::::0;57377:16;;::::1;::::0;-1:-1:-1;;;57351:10:0;;::::1;;:42;:::i;:::-;:75;;;;:::i;:::-;57325:101;;;;57437:11;57451:21;57437:35;;57483:23;57509:70;57553:15;57509:25;57517:16;;57509:3;:7;;:25;;;;:::i;:::-;:29:::0;::::1;:70::i;:::-;57483:96;;57590:17;57610:40;57634:15;57610:19;57618:10;;57610:3;:7;;:19;;;;:::i;:40::-;57590:60;;57661:24;57688:42;57714:15;57688:21;57696:12;;57688:3;:7;;:21;;;;:::i;:42::-;57749:15;::::0;57661:69;;-1:-1:-1;;;;;;57749:15:0::1;57741:69;57775:34;57661:69:::0;57775:15;:34:::1;:::i;:::-;57741:69;::::0;;::::1;::::0;;::::1;::::0;::::1;::::0;;;;;;::::1;;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;57829:9:0::1;::::0;57821:38:::1;::::0;-1:-1:-1;;;;;57829:9:0;;::::1;::::0;57821:38;::::1;;;::::0;57849:9;;57829::::1;57821:38:::0;57829:9;57821:38;57849:9;57829;57821:38;::::1;;;;;;;;;;;;;::::0;::::1;;;;;;48713:1;;;;;57266:601::o:0;62114:126::-;-1:-1:-1;;;;;62205:27:0;62181:4;62205:27;;;:20;:27;;;;;;;;;62114:126::o;60697:141::-;48665:9;;-1:-1:-1;;;;;48665:9:0;48678:10;48665:23;48657:45;;;;-1:-1:-1;;;48657:45:0;;;;;;;:::i;:::-;60798:3:::1;60774:21;:27:::0;;;60812:12:::1;:18:::0;60697:141::o;62733:214::-;2878:12;:10;:12::i;:::-;-1:-1:-1;;;;;2867:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;2867:23:0;;2859:68;;;;-1:-1:-1;;;2859:68:0;;;;;;;:::i;:::-;62830:3:::1;62823;:10;;:26;;;;;62844:5;62837:3;:12;;62823:26;62801:109;;;;-1:-1:-1::0;;;62801:109:0::1;;;;;;;:::i;:::-;62921:12;:18:::0;62733:214::o;46998:33::-;;;;:::o;62557:168::-;-1:-1:-1;;;;;62684:33:0;62655:4;62684:33;;;:24;:33;;;;;;;;;62557:168::o;66668:48::-;;;;;;;;;;;;;;;:::o;18158:177::-;-1:-1:-1;;;;;18309:18:0;18277:7;18309:18;;;;;;;;;;;;18158:177::o;3298:148::-;2878:12;:10;:12::i;:::-;-1:-1:-1;;;;;2867:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;2867:23:0;;2859:68;;;;-1:-1:-1;;;2859:68:0;;;;;;;:::i;:::-;3389:6:::1;::::0;3368:40:::1;::::0;3405:1:::1;::::0;-1:-1:-1;;;;;3389:6:0::1;::::0;3368:40:::1;::::0;3405:1;;3368:40:::1;3419:6;:19:::0;;-1:-1:-1;;;;;;3419:19:0::1;::::0;;3298:148::o;47175:39::-;;;-1:-1:-1;;;;;47175:39:0;;:::o;46800:33::-;;;;:::o;47281:75::-;;;-1:-1:-1;;;;;47281:75:0;;:::o;70706:1297::-;70817:7;70878:12;70864:11;:26;70842:119;;;;-1:-1:-1;;;70842:119:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;70996:23:0;;70974:19;70996:23;;;:14;:23;;;;;;;;71034:17;71030:58;;71075:1;71068:8;;;;;71030:58;-1:-1:-1;;;;;71148:20:0;;;;;;:11;:20;;;;;71200:11;;71169:16;71184:1;71169:12;:16;:::i;:::-;71148:38;;;;;;;;;;;;;;;-1:-1:-1;71148:38:0;:48;;:63;71144:147;;-1:-1:-1;;;;;71235:20:0;;;;;;:11;:20;;;;;;71256:16;71271:1;71256:12;:16;:::i;:::-;71235:38;;;;;;;;;;;;;;;:44;;;71228:51;;;;;71144:147;-1:-1:-1;;;;;71352:20:0;;;;;;:11;:20;;;;;;;;:23;;;;;;;;:33;:23;:33;:47;-1:-1:-1;71348:88:0;;;71423:1;71416:8;;;;;71348:88;71448:12;;71490:16;71505:1;71490:12;:16;:::i;:::-;71475:31;;71517:428;71532:5;71524:13;;:5;:13;;;71517:428;;;71554:13;71596:1;71579:13;71587:5;71579;:13;:::i;:::-;71578:19;;;;:::i;:::-;71570:27;;:5;:27;:::i;:::-;-1:-1:-1;;;;;71662:20:0;;71639;71662;;;:11;:20;;;;;;;;:28;;;;;;;;;;;;;71639:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;71554:43;;-1:-1:-1;71709:27:0;;71705:229;;;71764:8;;;;-1:-1:-1;71757:15:0;;-1:-1:-1;;;;71757:15:0;71705:229;71798:12;;:26;;;-1:-1:-1;71794:140:0;;;71853:6;71845:14;;71794:140;;;71908:10;71917:1;71908:6;:10;:::i;:::-;71900:18;;71794:140;71517:428;;;;;-1:-1:-1;;;;;;71962:20:0;;;;;;:11;:20;;;;;;;;:27;;;;;;;;;;:33;;;;-1:-1:-1;;70706:1297:0;;;;:::o;67245:41::-;;;;;;;;;;;;;:::o;60847:141::-;48665:9;;-1:-1:-1;;;;;48665:9:0;48678:10;48665:23;48657:45;;;;-1:-1:-1;;;48657:45:0;;;;;;;:::i;:::-;60944:5:::1;60920:21;:29:::0;;;60960:12:::1;:20:::0;60847:141::o;65760:197::-;48665:9;;-1:-1:-1;;;;;48665:9:0;48678:10;48665:23;48657:45;;;;-1:-1:-1;;;48657:45:0;;;;;;;:::i;:::-;65891:57:::1;::::0;;;;::::1;::::0;;;-1:-1:-1;;;;;65891:57:0;;::::1;::::0;;65880:5:::1;65891:57:::0;;::::1;::::0;;;65880:69;;::::1;::::0;::::1;::::0;;-1:-1:-1;65880:69:0;;;;;;::::1;::::0;;::::1;::::0;;::::1;::::0;;-1:-1:-1;;;;;;65880:69:0::1;::::0;;;::::1;;::::0;;;;;;::::1;::::0;;;;;;;;;::::1;::::0;::::1;:::i;:::-;;;;65760:197:::0;;:::o;48066:59::-;;;;;;;:::i;2647:87::-;2720:6;;-1:-1:-1;;;;;2720:6:0;2647:87;:::o;47363:69::-;;;-1:-1:-1;;;;;47363:69:0;;:::o;56601:319::-;2878:12;:10;:12::i;:::-;-1:-1:-1;;;;;2867:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;2867:23:0;;2859:68;;;;-1:-1:-1;;;2859:68:0;;;;;;;:::i;:::-;56675:13:::1;:43:::0;;-1:-1:-1;;;;;;56675:43:0::1;-1:-1:-1::0;;;;;56675:43:0;;::::1;::::0;;;::::1;::::0;;;;56761:23:::1;::::0;;-1:-1:-1;;;56761:23:0;;;;:13;;;::::1;::::0;:21:::1;::::0;:23:::1;::::0;;::::1;::::0;::::1;::::0;;;;;;;;;:13;:23;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;56743:50:0::1;;56816:4;56836:13;;;;;;;;;-1:-1:-1::0;;;;;56836:13:0::1;-1:-1:-1::0;;;;;56836:18:0::1;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;56743:124;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;56729:11;:138:::0;;-1:-1:-1;;;;;;56729:138:0::1;-1:-1:-1::0;;;;;56729:138:0;;::::1;;::::0;;;;56886:11:::1;56878:34;;;::::0;::::1;17086:104:::0;17142:13;17175:7;17168:14;;;;;:::i;46840:29::-;;;;:::o;51170:103::-;2878:12;:10;:12::i;:::-;-1:-1:-1;;;;;2867:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;2867:23:0;;2859:68;;;;-1:-1:-1;;;2859:68:0;;;;;;;:::i;:::-;51244:21:::1;51250:5;51257:7;51244:5;:21::i;:::-;51170:103:::0;;:::o;57046:124::-;48665:9;;-1:-1:-1;;;;;48665:9:0;48678:10;48665:23;48657:45;;;;-1:-1:-1;;;48657:45:0;;;;;;;:::i;:::-;57129:22:::1;:33:::0;;;::::1;;-1:-1:-1::0;;;57129:33:0::1;-1:-1:-1::0;;;;57129:33:0;;::::1;::::0;;;::::1;::::0;;57046:124::o;48132:55::-;;;;;;;:::i;21569:446::-;21689:4;21711:24;21738:11;:25;21750:12;:10;:12::i;:::-;-1:-1:-1;;;;;21738:25:0;;;;;;;;;;;;;;;;;-1:-1:-1;21738:25:0;;;:34;;;;;;;;;;;-1:-1:-1;21805:35:0;;;;21783:122;;;;-1:-1:-1;;;21783:122:0;;;;;;;:::i;:::-;21916:67;21925:12;:10;:12::i;:::-;21939:7;21948:34;21967:15;21948:16;:34;:::i;21916:67::-;-1:-1:-1;22003:4:0;;21569:446;-1:-1:-1;;;21569:446:0:o;47040:46::-;;;;:::o;65965:266::-;48665:9;;-1:-1:-1;;;;;48665:9:0;48678:10;48665:23;48657:45;;;;-1:-1:-1;;;48657:45:0;;;;;;;:::i;:::-;66111:25:::1;66139:5;66145:4;66139:11;;;;;;;;-1:-1:-1::0;;;66139:11:0::1;;;;;;;;;;;;;;;;;;;66111:39;;66179:5;66161:4;:15;;:23;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;66195:28:0;;-1:-1:-1;;;;;;66195:28:0::1;-1:-1:-1::0;;;;;66195:28:0;;;::::1;::::0;;;::::1;::::0;;-1:-1:-1;;65965:266:0:o;59501:848::-;2878:12;:10;:12::i;:::-;-1:-1:-1;;;;;2867:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;2867:23:0;;2859:68;;;;-1:-1:-1;;;2859:68:0;;;;;;;:::i;:::-;59914:11:::1;::::0;-1:-1:-1;;;59914:11:0;::::1;;;59893:17:::0;59858:32:::1;59879:11:::0;59858:18;:32:::1;:::i;:::-;:52;;;;:::i;:::-;:67;;;;59836:124;;;;-1:-1:-1::0;;;59836:124:0::1;;;;;;;:::i;:::-;59971:26;:47:::0;;60029:17:::1;:38:::0;;-1:-1:-1;;;;60029:38:0::1;-1:-1:-1::0;;;59971:47:0::1;60029:38:::0;;::::1;;;-1:-1:-1::0;;;;60078:46:0::1;-1:-1:-1::0;;;60078:46:0;;::::1;::::0;;;::::1;::::0;;;::::1;-1:-1:-1::0;;;;;60135:26:0::1;-1:-1:-1::0;;;60135:26:0;;::::1;::::0;;;::::1;::::0;;;::::1;-1:-1:-1::0;;;;60172:24:0::1;-1:-1:-1::0;;;60172:24:0;;::::1;::::0;;;::::1;::::0;;;::::1;-1:-1:-1::0;;;;60207:32:0::1;-1:-1:-1::0;;;60207:32:0;;::::1;::::0;;;::::1;::::0;;;::::1;::::0;;;-1:-1:-1;;59971:47:0;;::::1;::::0;;;::::1;::::0;;;::::1;::::0;;;::::1;-1:-1:-1::0;;60250:36:0::1;::::0;;::::1;::::0;;;::::1;-1:-1:-1::0;;60297:44:0::1;::::0;;;;::::1;;;::::0;;59501:848::o;18548:216::-;18670:4;18692:42;18702:12;:10;:12::i;:::-;18716:9;18727:6;18692:9;:42::i;70039:236::-;-1:-1:-1;;;;;70146:23:0;;70104:7;70146:23;;;:14;:23;;;;;;;;70200:16;:67;;70266:1;70200:67;;;-1:-1:-1;;;;;70219:20:0;;;;;;:11;:20;;;;;;70240:16;70255:1;70240:12;:16;:::i;:::-;70219:38;;;;;;;;;;;;;;;:44;;;70200:67;70180:87;70039:236;-1:-1:-1;;;70039:236:0:o;68691:1147::-;68876:23;66840:104;69005:6;:4;:6::i;:::-;68989:24;;;;;;69032:12;:10;:12::i;:::-;69071:4;68926:165;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;68902:200;;;;;;68876:226;;69115:18;67093:71;69192:9;69203:5;69210:6;69160:57;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;69136:92;;;;;;69115:113;;69241:14;69311:15;69328:10;69282:57;;;;;;;;;:::i;:::-;;;;;;;;;;;;;69258:92;;;;;;69241:109;;69363:17;69383:26;69393:6;69401:1;69404;69407;69383:26;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;69383:26:0;;-1:-1:-1;;69383:26:0;;;-1:-1:-1;;;;;;;69442:23:0;;69420:112;;;;-1:-1:-1;;;69420:112:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;69574:17:0;;;;;;:6;:17;;;;;:19;;;;;;:::i;:::-;;;;;69565:5;:28;69543:113;;;;-1:-1:-1;;;69543:113:0;;;;;;;:::i;:::-;69708:6;69689:15;:25;;69667:114;;;;-1:-1:-1;;;69667:114:0;;;;;;;:::i;:::-;69799:31;69809:9;69820;69799;:31::i;:::-;69792:38;;;;68691:1147;;;;;;:::o;48586:27::-;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;48586:27:0;;-1:-1:-1;48586:27:0;:::o;47246:26::-;;;-1:-1:-1;;;;;47246:26:0;;:::o;48293:42::-;;;;;;;;;;;;;:::o;61233:120::-;2878:12;:10;:12::i;:::-;-1:-1:-1;;;;;2867:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;2867:23:0;;2859:68;;;;-1:-1:-1;;;2859:68:0;;;;;;;:::i;:::-;61286:12:::1;:19:::0;;-1:-1:-1;;61286:19:0::1;;;::::0;;61316:22:::1;:29:::0;;-1:-1:-1;;;;61316:29:0::1;-1:-1:-1::0;;;61316:29:0::1;::::0;;61233:120::o;62381:168::-;48665:9;;-1:-1:-1;;;;;48665:9:0;48678:10;48665:23;48657:45;;;;-1:-1:-1;;;48657:45:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;62497:33:0;;;::::1;;::::0;;;:24:::1;:33;::::0;;;;:44;;-1:-1:-1;;62497:44:0::1;::::0;::::1;;::::0;;;::::1;::::0;;62381:168::o;62248:125::-;48665:9;;-1:-1:-1;;;;;48665:9:0;48678:10;48665:23;48657:45;;;;-1:-1:-1;;;48657:45:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;62332:27:0;;;::::1;;::::0;;;:20:::1;:27;::::0;;;;:33;;-1:-1:-1;;62332:33:0::1;::::0;::::1;;::::0;;;::::1;::::0;;62248:125::o;64830:693::-;64924:7;64949:21;64973:16;64983:5;64973:9;:16::i;:::-;64949:40;;65000:18;65021:17;:15;:17::i;:::-;65000:38;-1:-1:-1;65053:15:0;65049:56;;65092:1;65085:8;;;;;;65049:56;-1:-1:-1;;;;;65180:25:0;;65117:23;65180:25;;;:18;:25;;;;;;65143:18;;:73;;:22;:73::i;:::-;65117:99;-1:-1:-1;65233:19:0;;65229:268;;65269:12;65284:50;65323:10;65284:34;:15;65304:13;65284:19;:34::i;:50::-;65269:65;;65362:14;;65355:4;:21;65351:135;;;65404:14;;65397:21;;;;;;;;65351:135;65466:4;-1:-1:-1;65459:11:0;;-1:-1:-1;;;65459:11:0;65229:268;-1:-1:-1;65514:1:0;;64830:693;-1:-1:-1;;;;64830:693:0:o;18827:201::-;-1:-1:-1;;;;;18993:18:0;;;18961:7;18993:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;18827:201::o;46876:33::-;;;;:::o;61985:121::-;48665:9;;-1:-1:-1;;;;;48665:9:0;48678:10;48665:23;48657:45;;;;-1:-1:-1;;;48657:45:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;62067:25:0;;;::::1;;::::0;;;:18:::1;:25;::::0;;;;:31;;-1:-1:-1;;62067:31:0::1;::::0;::::1;;::::0;;;::::1;::::0;;61985:121::o;48470:62::-;;;;;;;;;;;;;:::o;67038:126::-;67093:71;67038:126;:::o;66531:68::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;3601:281::-;2878:12;:10;:12::i;:::-;-1:-1:-1;;;;;2867:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;2867:23:0;;2859:68;;;;-1:-1:-1;;;2859:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;3704:22:0;::::1;3682:110;;;;-1:-1:-1::0;;;3682:110:0::1;;;;;;;:::i;:::-;3829:6;::::0;3808:38:::1;::::0;-1:-1:-1;;;;;3808:38:0;;::::1;::::0;3829:6:::1;::::0;3808:38:::1;::::0;3829:6:::1;::::0;3808:38:::1;3857:6;:17:::0;;-1:-1:-1;;;;;;3857:17:0::1;-1:-1:-1::0;;;;;3857:17:0;;;::::1;::::0;;;::::1;::::0;;3601:281::o;61866:111::-;48665:9;;-1:-1:-1;;;;;48665:9:0;48678:10;48665:23;48657:45;;;;-1:-1:-1;;;48657:45:0;;;;;;;:::i;:::-;61944:15:::1;:25:::0;61866:111::o;1179:98::-;1259:10;1179:98;:::o;25065:380::-;-1:-1:-1;;;;;25201:19:0;;25193:68;;;;-1:-1:-1;;;25193:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;25280:21:0;;25272:68;;;;-1:-1:-1;;;25272:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;25353:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;;:36;;;25405:32;;;;;25383:6;;25405:32;:::i;:::-;;;;;;;;25065:380;;;:::o;51281:4558::-;51439:12;;;;;;;;:51;;;51483:7;:5;:7::i;:::-;-1:-1:-1;;;;;51472:18:0;:7;-1:-1:-1;;;;;51472:18:0;;51439:51;:93;;;;51525:7;:5;:7::i;:::-;-1:-1:-1;;;;;51511:21:0;:10;-1:-1:-1;;;;;51511:21:0;;51439:93;:147;;;-1:-1:-1;51572:13:0;;-1:-1:-1;;;;;51553:33:0;;;51572:13;;51553:33;51439:147;51417:206;;;;-1:-1:-1;;;51417:206:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;51639:19:0;;;;;;:10;:19;;;;;;;;;:45;;-1:-1:-1;;;;;;51662:22:0;;;;;;:10;:22;;;;;;;;51639:45;51636:128;;;51708:12;;;;51700:52;;;;-1:-1:-1;;;51700:52:0;;;;;;;:::i;:::-;51794:22;;-1:-1:-1;;;51794:22:0;;;;:30;;51820:4;51794:30;:74;;;;-1:-1:-1;51841:18:0;;-1:-1:-1;;;51841:18:0;;;;:27;51794:74;:127;;;;-1:-1:-1;51893:13:0;;-1:-1:-1;;;;;51893:13:0;51885:36;;51794:127;:169;;;;-1:-1:-1;51938:11:0;;-1:-1:-1;;;;;51938:11:0;:25;;51794:169;:208;;;;-1:-1:-1;51991:11:0;;-1:-1:-1;;;;;51980:22:0;;;51991:11;;51980:22;;51794:208;:258;;;;-1:-1:-1;52038:13:0;;-1:-1:-1;;;;;52019:33:0;;;52038:13;;52019:33;;51794:258;:293;;;;;52080:7;:5;:7::i;:::-;-1:-1:-1;;;;;52069:18:0;:7;-1:-1:-1;;;;;52069:18:0;;;51794:293;:334;;;;-1:-1:-1;;;;;;52104:24:0;;52123:4;52104:24;;51794:334;51776:408;;;52155:17;:15;:17::i;:::-;52250:11;;52234:12;;52196:18;;-1:-1:-1;;;52250:11:0;;;;;52218:13;:11;:13::i;:::-;:28;;;;:::i;:::-;52217:44;;;;:::i;:::-;52196:65;;52272:20;52350:11;;;;;;;;;;;52295:66;;52312:21;;52296:13;:11;:13::i;:::-;:37;;;;:::i;:::-;52295:66;;;;:::i;:::-;52272:89;;52407:12;52396:7;:23;;:56;;;-1:-1:-1;;;;;;52423:29:0;;;;;;:20;:29;;;;;;;;52396:56;52374:123;;;;-1:-1:-1;;;52374:123:0;;;;;;;:::i;:::-;52539:7;:5;:7::i;:::-;-1:-1:-1;;;;;52528:18:0;:7;-1:-1:-1;;;;;52528:18:0;;;:62;;;;-1:-1:-1;;;;;;52563:27:0;;52585:4;52563:27;;52528:62;:113;;;;-1:-1:-1;52629:11:0;;-1:-1:-1;;;;;52607:34:0;;;52629:11;;52607:34;;52528:113;:155;;;;-1:-1:-1;52672:11:0;;-1:-1:-1;;;;;52658:25:0;;;52672:11;;52658:25;;52528:155;52510:461;;;52710:22;52735:21;52745:10;52735:9;:21::i;:::-;-1:-1:-1;;;;;52797:36:0;;;;;;:24;:36;;;;;;52710:46;;-1:-1:-1;52797:36:0;;;:101;;-1:-1:-1;52887:10:0;52859:24;52876:7;52859:14;:24;:::i;:::-;:38;;52797:101;52771:188;;;;-1:-1:-1;;;52771:188:0;;;;;;;:::i;:::-;52510:461;;-1:-1:-1;;;;;52987:27:0;;;;;;:18;:27;;;;;;;;52983:2849;;;53031:45;53047:7;53056:10;53068:7;53031:15;:45::i;:::-;52983:2849;;;53186:11;;53109:21;;53133:79;;53186:11;-1:-1:-1;;;53186:11:0;;;;;53133:30;;:7;;-1:-1:-1;;;53145:17:0;;;53133:11;:30::i;:79::-;53312:11;;53109:103;;-1:-1:-1;53227:25:0;;53255:83;;53312:11;-1:-1:-1;;;53312:11:0;;;;;53255:34;;:7;;-1:-1:-1;;;53267:21:0;;;53255:11;:34::i;:83::-;53400:11;;53227:111;;-1:-1:-1;53353:15:0;;53371:41;;53400:11;-1:-1:-1;;;53400:11:0;;;;;53371:24;;:7;;-1:-1:-1;;;53383:11:0;;;53371;:24::i;:41::-;53472:11;;53353:59;;-1:-1:-1;53427:14:0;;53444:40;;53472:11;-1:-1:-1;;;53472:11:0;;;;;53444:23;;:7;;-1:-1:-1;;;53456:10:0;;;53444:11;:23::i;:40::-;53552:11;;53427:57;;-1:-1:-1;53499:18:0;;53520:44;;53552:11;-1:-1:-1;;;53552:11:0;;;;;53520:27;;:7;;-1:-1:-1;;;53532:14:0;;;53520:11;:27::i;:44::-;53654:11;;53614:16;;53499:65;;-1:-1:-1;53579:20:0;;53602:78;;53654:11;-1:-1:-1;;;53654:11:0;;;;;;53602:29;;:7;;53614:16;53602:11;:29::i;:78::-;53778:11;;53734:20;;53579:101;;-1:-1:-1;53695:24:0;;53722:82;;53778:11;-1:-1:-1;;;53778:11:0;;;;;;53722:33;;:7;;53734:20;;;;53722:11;:33::i;:82::-;53932:11;;53882:26;;53695:109;;-1:-1:-1;53819:30:0;;53852:92;;53932:11;-1:-1:-1;;;53932:11:0;;;;;;53852:57;;:7;;53882:26;;;;53852:29;:57::i;:92::-;53819:125;-1:-1:-1;53961:20:0;53819:125;54078:16;54048:10;53984:44;54021:7;53984:17;:44;:::i;:::-;:74;;;;:::i;:::-;:110;;;;:::i;:::-;:152;;;;:::i;:::-;53961:175;-1:-1:-1;54151:19:0;54291:22;54259:12;54233:6;54173:40;54206:7;54173:13;:40;:::i;:::-;:66;;;;:::i;:::-;:98;;;;:::i;:::-;:140;;;;:::i;:::-;54334:11;;54151:162;;-1:-1:-1;;;;;;54334:25:0;;;:11;;:25;54330:1335;;;54395:18;54405:7;54395:9;:18::i;:::-;54384:7;:29;54380:110;;;54437:33;54459:7;54468:1;54437:21;:33::i;:::-;54518:25;:7;54530:12;54518:11;:25::i;:::-;54508:35;;54562:45;54578:7;54587:10;54599:7;54562:15;:45::i;:::-;54626:58;54642:7;54659:4;54666:17;54626:15;:58::i;:::-;54703:46;54719:7;54728:11;;;;;;;;;-1:-1:-1;;;;;54728:11:0;54741:7;54703:15;:46::i;:::-;54768:51;54784:7;54801:4;54808:10;54768:15;:51::i;:::-;54838:57;54854:7;54871:4;54878:16;54838:15;:57::i;:::-;54914:63;54930:7;54947:4;54954:22;54914:15;:63::i;:::-;54330:1335;;;55028:24;:7;55040:11;55028;:24::i;:::-;55018:34;;55071:45;55087:7;55096:10;55108:7;55071:15;:45::i;:::-;55135:54;55151:7;55168:4;55175:13;55135:15;:54::i;:::-;55208:46;55224:7;55233:11;;;;;;;;;-1:-1:-1;;;;;55233:11:0;55246:7;55208:15;:46::i;:::-;55273:47;55289:7;55306:4;55313:6;55273:15;:47::i;:::-;55339:53;55355:7;55372:4;55379:12;55339:15;:53::i;:::-;55411:63;55427:7;55444:4;55451:22;55411:15;:63::i;:::-;55499:30;55518:10;55499:18;:30::i;:::-;55495:155;;55559:71;55581:10;55593:36;55613:15;;55593;:19;;:36;;;;:::i;:::-;55559:21;:71::i;:::-;55696:14;;:42;;55715:22;55696:18;:42::i;:::-;55679:14;:59;55774:18;;:46;;55797:22;55774;:46::i;:::-;55753:18;:67;-1:-1:-1;;;;;;;;;;51281:4558:0;;;;;:::o;6843:98::-;6901:7;6928:5;6932:1;6928;:5;:::i;7224:98::-;7282:7;7309:5;7313:1;7309;:5;:::i;57906:949::-;48764:18;:25;;-1:-1:-1;;;;48764:25:0;-1:-1:-1;;;48764:25:0;;;48920:17:::1;::::0;;49175:16:::1;::::0;;-1:-1:-1;;;;;49457:18:0;;;;;-1:-1:-1;;49552:30:0;;;;48920:17:::1;-1:-1:-1::0;;;48920:17:0;::::1;::::0;::::1;::::0;-1:-1:-1;;;48980:21:0;::::1;::::0;::::1;::::0;-1:-1:-1;;;49034:11:0;::::1;::::0;::::1;::::0;-1:-1:-1;;;49077:10:0;::::1;::::0;::::1;::::0;-1:-1:-1;;;49123:14:0;;::::1;::::0;::::1;::::0;49175:16;;::::1;::::0;49233:20;;::::1;::::0;::::1;::::0;49301:26;;::::1;;48764:25:::0;58011:24:::2;58029:4;58011:9;:24::i;:::-;57980:55;;58046:23;58104:12;;58091:10;;58072:16;;:29;;;;:::i;:::-;:44;;;;:::i;:::-;58046:70;;58154:14;;58131:20;:37;58127:721;;;58233:14;::::0;58208:40:::2;::::0;:20;;:24:::2;:40::i;:::-;58185:63;;58299:38;58316:20;58299:16;:38::i;:::-;58354:11;58368:21;58354:35;;58404:23;58430:78;58478:15;58430:25;58438:16;;58430:3;:7;;:25;;;;:::i;:78::-;58404:104;;58523:17;58543:40;58567:15;58543:19;58551:10;;58543:3;:7;;:19;;;;:::i;:40::-;58523:60;;58598:24;58625:74;58669:15;58625:21;58633:12;;58625:3;:7;;:21;;;;:::i;:74::-;58722:15;::::0;58598:101;;-1:-1:-1;;;;;;58722:15:0::2;58714:69;58748:34;58598:101:::0;58748:15;:34:::2;:::i;:::-;58714:69;::::0;;::::2;::::0;;::::2;::::0;::::2;::::0;;;;;;::::2;;;;;;;;;;;;;::::0;::::2;;;;;-1:-1:-1::0;58806:9:0::2;::::0;58798:38:::2;::::0;-1:-1:-1;;;;;58806:9:0;;::::2;::::0;58798:38;::::2;;;::::0;58826:9;;58806::::2;58798:38:::0;58806:9;58798:38;58826:9;58806;58798:38;::::2;;;;;;;;;;;;;::::0;::::2;;;;;;58127:721;;;;;-1:-1:-1::0;;49605:17:0::1;:38:::0;;-1:-1:-1;;;;49605:38:0::1;-1:-1:-1::0;;;49605:38:0::1;::::0;;::::1;;;-1:-1:-1::0;;;;49654:46:0::1;-1:-1:-1::0;;;49654:46:0;;::::1;::::0;;;::::1;::::0;;;::::1;-1:-1:-1::0;;;;;49711:26:0::1;-1:-1:-1::0;;;49711:26:0;;::::1;::::0;;;::::1;::::0;;;::::1;-1:-1:-1::0;;;;49748:24:0::1;-1:-1:-1::0;;;49748:24:0;;::::1;::::0;;;::::1;::::0;;;::::1;-1:-1:-1::0;;;;49783:32:0::1;-1:-1:-1::0;;;49783:32:0;;::::1;::::0;;;::::1;::::0;;;::::1;::::0;;;49826:16:::1;:36:::0;;-1:-1:-1;;49826:36:0::1;::::0;;::::1;::::0;;;::::1;-1:-1:-1::0;;49873:44:0::1;::::0;;;::::1;::::0;;;::::1;;-1:-1:-1::0;;49928:56:0::1;::::0;;;;::::1;;::::0;;;::::1;::::0;;48812:18;:26;;-1:-1:-1;;;;48812:26:0;;;57906:949::o;72011:424::-;-1:-1:-1;;;;;72114:21:0;;;72088:23;72114:21;;;:10;:21;;;;;;;;;;72173:20;72125:9;72173;:20::i;:::-;-1:-1:-1;;;;;72249:21:0;;;;;;;:10;:21;;;;;;:33;;-1:-1:-1;;;;;;72249:33:0;;;;;;;;;;72300:54;;72146:47;;-1:-1:-1;72249:33:0;72300:54;;;;;;72249:21;72300:54;72367:60;72382:15;72399:9;72410:16;72367:14;:60::i;:::-;72011:424;;;;:::o;7581:98::-;7639:7;7666:5;7670:1;7666;:5;:::i;7980:98::-;8038:7;8065:5;8069:1;8065;:5;:::i;24133:494::-;-1:-1:-1;;;;;24217:21:0;;24209:67;;;;-1:-1:-1;;;24209:67:0;;;;;;;:::i;:::-;24289:49;24310:7;24327:1;24331:6;24289:20;:49::i;:::-;-1:-1:-1;;;;;24376:18:0;;24351:22;24376:18;;;;;;;;;;;24413:24;;;;24405:71;;;;-1:-1:-1;;;24405:71:0;;;;;;;:::i;:::-;24508:23;24525:6;24508:14;:23;:::i;:::-;-1:-1:-1;;;;;24487:18:0;;:9;:18;;;;;;;;;;:44;;;;24542:12;:22;;24558:6;;24487:9;24542:22;;24558:6;;24542:22;:::i;:::-;;;;-1:-1:-1;;24582:37:0;;24608:1;;-1:-1:-1;;;;;24582:37:0;;;;;;;24612:6;;24582:37;:::i;74542:178::-;74668:9;74542:178;:::o;65531:221::-;65637:11;;65580:7;;;;65627:22;;-1:-1:-1;;;;;65637:11:0;65627:9;:22::i;:::-;65600:49;;65660:18;65681:35;65699:16;65681:13;:11;:13::i;:::-;:17;;:35::i;:::-;65660:56;-1:-1:-1;;;65531:221:0;:::o;22505:675::-;-1:-1:-1;;;;;22645:20:0;;22637:70;;;;-1:-1:-1;;;22637:70:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;22726:23:0;;22718:71;;;;-1:-1:-1;;;22718:71:0;;;;;;;:::i;:::-;22802:47;22823:6;22831:9;22842:6;22802:20;:47::i;:::-;-1:-1:-1;;;;;22886:17:0;;22862:21;22886:17;;;;;;;;;;;22936:23;;;;22914:111;;;;-1:-1:-1;;;22914:111:0;;;;;;;:::i;:::-;23056:22;23072:6;23056:13;:22;:::i;:::-;-1:-1:-1;;;;;23036:17:0;;;:9;:17;;;;;;;;;;;:42;;;;23089:20;;;;;;;;:30;;23113:6;;23036:9;23089:30;;23113:6;;23089:30;:::i;:::-;;;;;;;;23154:9;-1:-1:-1;;;;;23137:35:0;23146:6;-1:-1:-1;;;;;23137:35:0;;23165:6;23137:35;;;;;;:::i;:::-;;;;;;;;22505:675;;;;:::o;55847:151::-;-1:-1:-1;;;;;55945:33:0;;;;;;;:27;:33;;;;;:45;55847:151::o;58897:596::-;59051:16;;;59065:1;59051:16;;;;;;;;59027:21;;59051:16;;;;;;;;;;-1:-1:-1;59051:16:0;59027:40;;59096:4;59078;59083:1;59078:7;;;;;;-1:-1:-1;;;59078:7:0;;;;;;;;;-1:-1:-1;;;;;59078:23:0;;;:7;;;;;;;;;;:23;;;;59122:13;;:20;;;-1:-1:-1;;;59122:20:0;;;;:13;;;;;:18;;:20;;;;;59078:7;;59122:20;;;;;:13;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;59112:4;59117:1;59112:7;;;;;;-1:-1:-1;;;59112:7:0;;;;;;;;;-1:-1:-1;;;;;59112:30:0;;;:7;;;;;;;;;:30;59187:13;;59155:60;;59172:4;;59187:13;59203:11;59155:8;:60::i;:::-;59254:13;;-1:-1:-1;;;;;59254:13:0;:64;59333:11;59254:13;59403:4;59430;59450:24;:15;59468:6;59450:24;:::i;:::-;59254:231;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;72443:1065;72583:6;-1:-1:-1;;;;;72573:16:0;:6;-1:-1:-1;;;;;72573:16:0;;;:30;;;;;72602:1;72593:6;:10;72573:30;72569:932;;;-1:-1:-1;;;;;72624:20:0;;;72620:427;;-1:-1:-1;;;;;72732:22:0;;72713:16;72732:22;;;:14;:22;;;;;;;;;72793:13;:102;;72894:1;72793:102;;;-1:-1:-1;;;;;72830:19:0;;;;;;:11;:19;;;;;;72850:13;72862:1;72850:9;:13;:::i;:::-;72830:34;;;;;;;;;;;;;;;:40;;;72793:102;72773:122;-1:-1:-1;72914:17:0;72934:21;72773:122;72948:6;72934:13;:21::i;:::-;72914:41;;72974:57;72991:6;72999:9;73010;73021;72974:16;:57::i;:::-;72620:427;;;;-1:-1:-1;;;;;73067:20:0;;;73063:427;;-1:-1:-1;;;;;73175:22:0;;73156:16;73175:22;;;:14;:22;;;;;;;;;73236:13;:102;;73337:1;73236:102;;;-1:-1:-1;;;;;73273:19:0;;;;;;:11;:19;;;;;;73293:13;73305:1;73293:9;:13;:::i;:::-;73273:34;;;;;;;;;;;;;;;:40;;;73236:102;73216:122;-1:-1:-1;73357:17:0;73377:21;73216:122;73391:6;73377:13;:21::i;:::-;73357:41;;73417:57;73434:6;73442:9;73453;73464;73417:16;:57::i;73063:427::-;72443:1065;;;:::o;73516:814::-;73681:18;73702:114;73723:12;73702:114;;;;;;;;;;;;;;;;;:6;:114::i;:::-;73681:135;;73862:1;73847:12;:16;;;:98;;;;-1:-1:-1;;;;;;73880:22:0;;;;;;:11;:22;;;;;:65;;;;73903:16;73918:1;73903:12;:16;:::i;:::-;73880:40;;;;;;;;;;;;;;;-1:-1:-1;73880:40:0;:50;;:65;73847:98;73829:425;;;-1:-1:-1;;;;;73972:22:0;;;;;;:11;:22;;;;;74021:8;;73995:16;74010:1;73995:12;:16;:::i;:::-;73972:40;;;;;;;;;;;;;-1:-1:-1;73972:40:0;:46;;:57;73829:425;;;74101:82;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;74062:22:0;;-1:-1:-1;74062:22:0;;;:11;:22;;;;;:36;;;;;;;;;;;:121;;;;-1:-1:-1;;74062:121:0;;;;;;;;-1:-1:-1;74062:121:0;;;;74226:16;;74062:36;;74226:16;:::i;:::-;-1:-1:-1;;;;;74198:25:0;;;;;;:14;:25;;;;;:44;;-1:-1:-1;;74198:44:0;;;;;;;;;;;;73829:425;74292:9;-1:-1:-1;;;;;74271:51:0;;74303:8;74313;74271:51;;;;;;;:::i;:::-;;;;;;;;73516:814;;;;;:::o;74338:196::-;74443:6;74486:12;74479:5;74475:9;;74467:32;;;;-1:-1:-1;;;74467:32:0;;;;;;;;:::i;:::-;-1:-1:-1;74524:1:0;;74338:196;-1:-1:-1;;74338:196:0:o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;14:138:1;84:20;;113:33;84:20;113:33;:::i;157:934::-;;270:3;263:4;255:6;251:17;247:27;237:2;;292:5;285;278:20;237:2;332:6;319:20;358:4;381:18;418:2;414;411:10;408:2;;;424:18;;:::i;:::-;471:2;467;463:11;503:2;497:9;554:2;549;541:6;537:15;533:24;607:6;595:10;592:22;587:2;575:10;572:18;569:46;566:2;;;618:18;;:::i;:::-;654:2;647:22;704:18;;;738:15;;;;-1:-1:-1;773:15:1;;;807;;;803:24;;800:33;-1:-1:-1;797:2:1;;;850:5;843;836:20;797:2;876:5;867:14;;890:171;904:2;901:1;898:9;890:171;;;961:25;982:3;961:25;:::i;:::-;949:38;;1007:12;;;;922:1;915:9;;;;;1039:12;;890:171;;;-1:-1:-1;1079:6:1;227:864;-1:-1:-1;;;;;;;227:864:1:o;1096:162::-;1163:20;;1219:13;;1212:21;1202:32;;1192:2;;1248:1;1245;1238:12;1263:161;1332:20;;1392:6;1381:18;;1371:29;;1361:2;;1414:1;1411;1404:12;1429:158;1497:20;;1557:4;1546:16;;1536:27;;1526:2;;1577:1;1574;1567:12;1592:259;;1704:2;1692:9;1683:7;1679:23;1675:32;1672:2;;;1725:6;1717;1710:22;1672:2;1769:9;1756:23;1788:33;1815:5;1788:33;:::i;1856:263::-;;1979:2;1967:9;1958:7;1954:23;1950:32;1947:2;;;2000:6;1992;1985:22;1947:2;2037:9;2031:16;2056:33;2083:5;2056:33;:::i;2124:402::-;;;2253:2;2241:9;2232:7;2228:23;2224:32;2221:2;;;2274:6;2266;2259:22;2221:2;2318:9;2305:23;2337:33;2364:5;2337:33;:::i;:::-;2389:5;-1:-1:-1;2446:2:1;2431:18;;2418:32;2459:35;2418:32;2459:35;:::i;:::-;2513:7;2503:17;;;2211:315;;;;;:::o;2531:470::-;;;;2677:2;2665:9;2656:7;2652:23;2648:32;2645:2;;;2698:6;2690;2683:22;2645:2;2742:9;2729:23;2761:33;2788:5;2761:33;:::i;:::-;2813:5;-1:-1:-1;2870:2:1;2855:18;;2842:32;2883:35;2842:32;2883:35;:::i;:::-;2635:366;;2937:7;;-1:-1:-1;;;2991:2:1;2976:18;;;;2963:32;;2635:366::o;3006:329::-;;;3132:2;3120:9;3111:7;3107:23;3103:32;3100:2;;;3153:6;3145;3138:22;3100:2;3197:9;3184:23;3216:33;3243:5;3216:33;:::i;:::-;3268:5;-1:-1:-1;3292:37:1;3325:2;3310:18;;3292:37;:::i;:::-;3282:47;;3090:245;;;;;:::o;3340:327::-;;;3469:2;3457:9;3448:7;3444:23;3440:32;3437:2;;;3490:6;3482;3475:22;3437:2;3534:9;3521:23;3553:33;3580:5;3553:33;:::i;:::-;3605:5;3657:2;3642:18;;;;3629:32;;-1:-1:-1;;;3427:240:1:o;3672:606::-;;;;;;;3867:3;3855:9;3846:7;3842:23;3838:33;3835:2;;;3889:6;3881;3874:22;3835:2;3933:9;3920:23;3952:33;3979:5;3952:33;:::i;:::-;4004:5;-1:-1:-1;4056:2:1;4041:18;;4028:32;;-1:-1:-1;4107:2:1;4092:18;;4079:32;;-1:-1:-1;4130:38:1;4164:2;4149:18;;4130:38;:::i;:::-;4120:48;;4215:3;4204:9;4200:19;4187:33;4177:43;;4267:3;4256:9;4252:19;4239:33;4229:43;;3825:453;;;;;;;;:::o;4283:441::-;;;4411:2;4399:9;4390:7;4386:23;4382:32;4379:2;;;4432:6;4424;4417:22;4379:2;4476:9;4463:23;4495:33;4522:5;4495:33;:::i;:::-;4547:5;-1:-1:-1;4604:2:1;4589:18;;4576:32;4652:10;4639:24;;4627:37;;4617:2;;4683:6;4675;4668:22;4729:511;;;4883:2;4871:9;4862:7;4858:23;4854:32;4851:2;;;4904:6;4896;4889:22;4851:2;4949:9;4936:23;4982:18;4974:6;4971:30;4968:2;;;5019:6;5011;5004:22;4968:2;5047:67;5106:7;5097:6;5086:9;5082:22;5047:67;:::i;:::-;5037:77;;;5164:2;5153:9;5149:18;5136:32;5177:33;5204:5;5177:33;:::i;5245:192::-;;5354:2;5342:9;5333:7;5329:23;5325:32;5322:2;;;5375:6;5367;5360:22;5322:2;5403:28;5421:9;5403:28;:::i;5442:196::-;;5553:2;5541:9;5532:7;5528:23;5524:32;5521:2;;;5574:6;5566;5559:22;5521:2;5602:30;5622:9;5602:30;:::i;5643:719::-;;;;;;;;;5866:3;5854:9;5845:7;5841:23;5837:33;5834:2;;;5888:6;5880;5873:22;5834:2;5916:30;5936:9;5916:30;:::i;:::-;5906:40;;5965:39;6000:2;5989:9;5985:18;5965:39;:::i;:::-;5955:49;;6023:39;6058:2;6047:9;6043:18;6023:39;:::i;:::-;6013:49;;6081:39;6116:2;6105:9;6101:18;6081:39;:::i;:::-;6071:49;;6139:40;6174:3;6163:9;6159:19;6139:40;:::i;:::-;6129:50;;6198:40;6233:3;6222:9;6218:19;6198:40;:::i;:::-;6188:50;;6257:40;6292:3;6281:9;6277:19;6257:40;:::i;:::-;6247:50;;6316:40;6351:3;6340:9;6336:19;6316:40;:::i;:::-;6306:50;;5824:538;;;;;;;;;;;:::o;6367:190::-;;6479:2;6467:9;6458:7;6454:23;6450:32;6447:2;;;6500:6;6492;6485:22;6447:2;-1:-1:-1;6528:23:1;;6437:120;-1:-1:-1;6437:120:1:o;6562:583::-;;;;6731:2;6719:9;6710:7;6706:23;6702:32;6699:2;;;6752:6;6744;6737:22;6699:2;6780:29;6799:9;6780:29;:::i;:::-;6770:39;;6860:2;6849:9;6845:18;6832:32;6887:18;6879:6;6876:30;6873:2;;;6924:6;6916;6909:22;6873:2;6952:67;7011:7;7002:6;6991:9;6987:22;6952:67;:::i;:::-;6942:77;;;7069:2;7058:9;7054:18;7041:32;7082:33;7109:5;7082:33;:::i;:::-;7134:5;7124:15;;;6689:456;;;;;:::o;7150:392::-;-1:-1:-1;;;7408:27:1;;7460:1;7451:11;;7444:27;;;;7496:2;7487:12;;7480:28;7533:2;7524:12;;7398:144::o;7547:203::-;-1:-1:-1;;;;;7711:32:1;;;;7693:51;;7681:2;7666:18;;7648:102::o;7755:304::-;-1:-1:-1;;;;;7985:15:1;;;7967:34;;8037:15;;8032:2;8017:18;;8010:43;7917:2;7902:18;;7884:175::o;8064:187::-;8229:14;;8222:22;8204:41;;8192:2;8177:18;;8159:92::o;8256:177::-;8402:25;;;8390:2;8375:18;;8357:76::o;8438:417::-;8669:25;;;-1:-1:-1;;;;;8730:32:1;;;;8725:2;8710:18;;8703:60;8794:2;8779:18;;8772:34;8837:2;8822:18;;8815:34;8656:3;8641:19;;8623:232::o;8860:417::-;9091:25;;;9147:2;9132:18;;9125:34;;;;9190:2;9175:18;;9168:34;-1:-1:-1;;;;;9238:32:1;9233:2;9218:18;;9211:60;9078:3;9063:19;;9045:232::o;9282:398::-;9509:25;;;9582:4;9570:17;;;;9565:2;9550:18;;9543:45;9619:2;9604:18;;9597:34;9662:2;9647:18;;9640:34;9496:3;9481:19;;9463:217::o;9920:603::-;;10061:2;10090;10079:9;10072:21;10122:6;10116:13;10165:6;10160:2;10149:9;10145:18;10138:34;10190:4;10203:140;10217:6;10214:1;10211:13;10203:140;;;10312:14;;;10308:23;;10302:30;10278:17;;;10297:2;10274:26;10267:66;10232:10;;10203:140;;;10361:6;10358:1;10355:13;10352:2;;;10431:4;10426:2;10417:6;10406:9;10402:22;10398:31;10391:45;10352:2;-1:-1:-1;10507:2:1;10486:15;-1:-1:-1;;10482:29:1;10467:45;;;;10514:2;10463:54;;10041:482;-1:-1:-1;;;10041:482:1:o;10528:399::-;10730:2;10712:21;;;10769:2;10749:18;;;10742:30;10808:34;10803:2;10788:18;;10781:62;-1:-1:-1;;;10874:2:1;10859:18;;10852:33;10917:3;10902:19;;10702:225::o;10932:399::-;11134:2;11116:21;;;11173:2;11153:18;;;11146:30;11212:34;11207:2;11192:18;;11185:62;-1:-1:-1;;;11278:2:1;11263:18;;11256:33;11321:3;11306:19;;11106:225::o;11336:341::-;11538:2;11520:21;;;11577:2;11557:18;;;11550:30;-1:-1:-1;;;11611:2:1;11596:18;;11589:47;11668:2;11653:18;;11510:167::o;11682:398::-;11884:2;11866:21;;;11923:2;11903:18;;;11896:30;11962:34;11957:2;11942:18;;11935:62;-1:-1:-1;;;12028:2:1;12013:18;;12006:32;12070:3;12055:19;;11856:224::o;12085:349::-;12287:2;12269:21;;;12326:2;12306:18;;;12299:30;12365:27;12360:2;12345:18;;12338:55;12425:2;12410:18;;12259:175::o;12439:397::-;12641:2;12623:21;;;12680:2;12660:18;;;12653:30;12719:34;12714:2;12699:18;;12692:62;-1:-1:-1;;;12785:2:1;12770:18;;12763:31;12826:3;12811:19;;12613:223::o;12841:332::-;13043:2;13025:21;;;13082:1;13062:18;;;13055:29;-1:-1:-1;;;13115:2:1;13100:18;;13093:39;13164:2;13149:18;;13015:158::o;13178:402::-;13380:2;13362:21;;;13419:2;13399:18;;;13392:30;13458:34;13453:2;13438:18;;13431:62;-1:-1:-1;;;13524:2:1;13509:18;;13502:36;13570:3;13555:19;;13352:228::o;13585:398::-;13787:2;13769:21;;;13826:2;13806:18;;;13799:30;13865:34;13860:2;13845:18;;13838:62;-1:-1:-1;;;13931:2:1;13916:18;;13909:32;13973:3;13958:19;;13759:224::o;13988:403::-;14190:2;14172:21;;;14229:2;14209:18;;;14202:30;14268:34;14263:2;14248:18;;14241:62;-1:-1:-1;;;14334:2:1;14319:18;;14312:37;14381:3;14366:19;;14162:229::o;14396:353::-;14598:2;14580:21;;;14637:2;14617:18;;;14610:30;14676:31;14671:2;14656:18;;14649:59;14740:2;14725:18;;14570:179::o;14754:402::-;14956:2;14938:21;;;14995:2;14975:18;;;14968:30;15034:34;15029:2;15014:18;;15007:62;-1:-1:-1;;;15100:2:1;15085:18;;15078:36;15146:3;15131:19;;14928:228::o;15161:403::-;15363:2;15345:21;;;15402:2;15382:18;;;15375:30;15441:34;15436:2;15421:18;;15414:62;-1:-1:-1;;;15507:2:1;15492:18;;15485:37;15554:3;15539:19;;15335:229::o;15569:343::-;15771:2;15753:21;;;15810:2;15790:18;;;15783:30;-1:-1:-1;;;15844:2:1;15829:18;;15822:49;15903:2;15888:18;;15743:169::o;15917:351::-;16119:2;16101:21;;;16158:2;16138:18;;;16131:30;16197:29;16192:2;16177:18;;16170:57;16259:2;16244:18;;16091:177::o;16273:404::-;16475:2;16457:21;;;16514:2;16494:18;;;16487:30;16553:34;16548:2;16533:18;;16526:62;-1:-1:-1;;;16619:2:1;16604:18;;16597:38;16667:3;16652:19;;16447:230::o;16682:356::-;16884:2;16866:21;;;16903:18;;;16896:30;16962:34;16957:2;16942:18;;16935:62;17029:2;17014:18;;16856:182::o;17043:397::-;17245:2;17227:21;;;17284:2;17264:18;;;17257:30;17323:34;17318:2;17303:18;;17296:62;-1:-1:-1;;;17389:2:1;17374:18;;17367:31;17430:3;17415:19;;17217:223::o;17445:401::-;17647:2;17629:21;;;17686:2;17666:18;;;17659:30;17725:34;17720:2;17705:18;;17698:62;-1:-1:-1;;;17791:2:1;17776:18;;17769:35;17836:3;17821:19;;17619:227::o;17851:330::-;18053:2;18035:21;;;18092:1;18072:18;;;18065:29;-1:-1:-1;;;18125:2:1;18110:18;;18103:37;18172:2;18157:18;;18025:156::o;18186:400::-;18388:2;18370:21;;;18427:2;18407:18;;;18400:30;18466:34;18461:2;18446:18;;18439:62;-1:-1:-1;;;18532:2:1;18517:18;;18510:34;18576:3;18561:19;;18360:226::o;18591:332::-;18793:2;18775:21;;;18832:1;18812:18;;;18805:29;-1:-1:-1;;;18865:2:1;18850:18;;18843:39;18914:2;18899:18;;18765:158::o;18928:407::-;19130:2;19112:21;;;19169:2;19149:18;;;19142:30;19208:34;19203:2;19188:18;;19181:62;-1:-1:-1;;;19274:2:1;19259:18;;19252:41;19325:3;19310:19;;19102:233::o;19340:401::-;19542:2;19524:21;;;19581:2;19561:18;;;19554:30;19620:34;19615:2;19600:18;;19593:62;-1:-1:-1;;;19686:2:1;19671:18;;19664:35;19731:3;19716:19;;19514:227::o;19928:983::-;;20238:3;20227:9;20223:19;20269:6;20258:9;20251:25;20295:2;20333:6;20328:2;20317:9;20313:18;20306:34;20376:3;20371:2;20360:9;20356:18;20349:31;20400:6;20435;20429:13;20466:6;20458;20451:22;20504:3;20493:9;20489:19;20482:26;;20543:2;20535:6;20531:15;20517:29;;20564:4;20577:195;20591:6;20588:1;20585:13;20577:195;;;20656:13;;-1:-1:-1;;;;;20652:39:1;20640:52;;20747:15;;;;20712:12;;;;20688:1;20606:9;20577:195;;;-1:-1:-1;;;;;;;20828:32:1;;;;20823:2;20808:18;;20801:60;-1:-1:-1;;;20892:3:1;20877:19;20870:35;20789:3;20199:712;-1:-1:-1;;;20199:712:1:o;20916:1012::-;;21223:3;21212:9;21208:19;21254:6;21243:9;21236:25;21280:2;21318:6;21313:2;21302:9;21298:18;21291:34;21361:3;21356:2;21345:9;21341:18;21334:31;21385:6;21420;21414:13;21451:6;21443;21436:22;21489:3;21478:9;21474:19;21467:26;;21515:6;21509:4;21502:20;21561:2;21555:4;21545:19;21531:33;;21582:4;21595:194;21609:6;21606:1;21603:13;21595:194;;;21674:13;;-1:-1:-1;;;;;21670:39:1;21658:52;;21706:1;21765:14;;;;21730:12;;;;21624:9;21595:194;;21933:248;22107:25;;;22163:2;22148:18;;22141:34;22095:2;22080:18;;22062:119::o;22186:192::-;22360:10;22348:23;;;;22330:42;;22318:2;22303:18;;22285:93::o;22383:263::-;22585:10;22573:23;;;;22555:42;;22628:2;22613:18;;22606:34;22543:2;22528:18;;22510:136::o;22651:184::-;22823:4;22811:17;;;;22793:36;;22781:2;22766:18;;22748:87::o;22840:224::-;;22907:6;22940:2;22937:1;22933:10;22970:2;22967:1;22963:10;23001:3;22997:2;22993:12;22988:3;22985:21;22982:2;;;23009:18;;:::i;:::-;23045:13;;22887:177;-1:-1:-1;;;;22887:177:1:o;23069:128::-;;23140:1;23136:6;23133:1;23130:13;23127:2;;;23146:18;;:::i;:::-;-1:-1:-1;23182:9:1;;23117:80::o;23202:228::-;;23269:10;23306:2;23303:1;23299:10;23336:2;23333:1;23329:10;23367:3;23363:2;23359:12;23354:3;23351:21;23348:2;;;23375:18;;:::i;23435:120::-;;23501:1;23491:2;;23506:18;;:::i;:::-;-1:-1:-1;23540:9:1;;23481:74::o;23560:191::-;;23625:10;23662:2;23659:1;23655:10;23684:3;23674:2;;23691:18;;:::i;:::-;23729:10;;23725:20;;;;;23605:146;-1:-1:-1;;23605:146:1:o;23756:168::-;;23862:1;23858;23854:6;23850:14;23847:1;23844:21;23839:1;23832:9;23825:17;23821:45;23818:2;;;23869:18;;:::i;:::-;-1:-1:-1;23909:9:1;;23808:116::o;23929:125::-;;23997:1;23994;23991:8;23988:2;;;24002:18;;:::i;:::-;-1:-1:-1;24039:9:1;;23978:76::o;24059:221::-;;24127:10;24187;;;;24157;;24209:12;;;24206:2;;;24224:18;;:::i;:::-;24261:13;;24107:173;-1:-1:-1;;;24107:173:1:o;24285:380::-;24370:1;24360:12;;24417:1;24407:12;;;24428:2;;24482:4;24474:6;24470:17;24460:27;;24428:2;24535;24527:6;24524:14;24504:18;24501:38;24498:2;;;24581:10;24576:3;24572:20;24569:1;24562:31;24616:4;24613:1;24606:15;24644:4;24641:1;24634:15;24498:2;;24340:325;;;:::o;24670:135::-;;-1:-1:-1;;24730:17:1;;24727:2;;;24750:18;;:::i;:::-;-1:-1:-1;24797:1:1;24786:13;;24717:88::o;24810:127::-;24871:10;24866:3;24862:20;24859:1;24852:31;24902:4;24899:1;24892:15;24926:4;24923:1;24916:15;24942:127;25003:10;24998:3;24994:20;24991:1;24984:31;25034:4;25031:1;25024:15;25058:4;25055:1;25048:15;25074:127;25135:10;25130:3;25126:20;25123:1;25116:31;25166:4;25163:1;25156:15;25190:4;25187:1;25180:15;25206:133;-1:-1:-1;;;;;25283:31:1;;25273:42;;25263:2;;25329:1;25326;25319:12

Swarm Source

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