ETH Price: $3,100.07 (-0.91%)

Token

GameFinity (GFN)
 

Overview

Max Total Supply

1,000,000 GFN

Holders

354 (0.00%)

Market

Price

$0.01 @ 0.000003 ETH

Onchain Market Cap

$9,077.83

Circulating Supply Market Cap

$9,077.83

Other Info

Token Contract (WITH 18 Decimals)

Balance
0.000000000000031079 GFN

Value
$0.00 ( ~0 Eth) [0.0000%]
0xBFCa0c3C4a9e38Bab2C4DC00Cc31899ebC8B20E8
Loading...
Loading
Loading...
Loading
Loading...
Loading

OVERVIEW

GameFinity is a blockchain play-to-earn platform combining gaming with casino-style prizes. Users can connect their crypto wallet and explore a nostalgic 8-bit arcade environment.

# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
GameFinity

Compiler Version
v0.8.20+commit.a1b79de6

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2024-09-05
*/

/**
    GameFinity

    Website:      https://gamefinity.tech/
    Twitter:      https://x.com/gamefinity_eth
    Telegram:     https://t.me/GamefinityETH
**/

// SPDX-License-Identifier: MIT
pragma solidity 0.8.20;
pragma experimental ABIEncoderV2;

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

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

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

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

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

    /**
     * @dev 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 {
        _transferOwnership(address(0));
    }

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

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

////// lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol
// OpenZeppelin Contracts v4.4.0 (token/ERC20/IERC20.sol)

/* 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);
}

////// lib/openzeppelin-contracts/contracts/token/ERC20/extensions/IERC20Metadata.sol
// OpenZeppelin Contracts v4.4.0 (token/ERC20/extensions/IERC20Metadata.sol)

/* pragma solidity ^0.8.0; */

/* import "../IERC20.sol"; */

/**
 * @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);
}

/**
 * @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 Contracts guidelines: functions revert
 * instead returning `false` on failure. This behavior is nonetheless
 * conventional and does not conflict with the expectations of ERC20
 * applications.
 *
 * Additionally, an {Approval} event is emitted on calls to {transferFrom}.
 * This allows applications to reconstruct the allowance for all accounts just
 * by listening to said events. Other implementations of the EIP may not emit
 * these events, as it isn't required by the specification.
 *
 * Finally, the non-standard {decreaseAllowance} and {increaseAllowance}
 * functions have been added to mitigate the well-known issues around setting
 * allowances. See {IERC20-approve}.
 */
contract ERC20 is Context, IERC20, IERC20Metadata {
    mapping(address => uint256) private _balances;

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

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

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

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

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

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

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

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

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

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

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

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

        uint256 currentAllowance = _allowances[sender][_msgSender()];
        require(currentAllowance >= amount, "ERC20: transfer amount exceeds allowance");
        unchecked {
            _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");
        unchecked {
            _approve(_msgSender(), spender, currentAllowance - subtractedValue);
        }

        return true;
    }

    /**
     * @dev Moves `amount` of tokens from `sender` to `recipient`.
     *
     * This internal function is equivalent to {transfer}, and can be used to
     * e.g. implement automatic token fees, slashing mechanisms, etc.
     *
     * Emits a {Transfer} event.
     *
     * Requirements:
     *
     * - `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");
        unchecked {
            _balances[sender] = senderBalance - amount;
        }
        _balances[recipient] += amount;

        emit Transfer(sender, recipient, amount);

        _afterTokenTransfer(sender, recipient, amount);
    }

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

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

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

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

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

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

        uint256 accountBalance = _balances[account];
        require(accountBalance >= amount, "ERC20: burn amount exceeds balance");
        unchecked {
            _balances[account] = accountBalance - amount;
        }
        _totalSupply -= amount;

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

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

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

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

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

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

/**
 * @dev Wrappers over Solidity's arithmetic operations.
 *
 * NOTE: `SafeMath` is generally not needed starting with Solidity 0.8, since 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. 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;
        }
    }
}

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

    function feeTo() external view returns (address);

    function feeToSetter() external view returns (address);

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

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

    function allPairsLength() external view returns (uint256);

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

    function setFeeTo(address) external;

    function setFeeToSetter(address) external;
}

////// src/IUniswapV2Pair.sol
/* pragma solidity 0.8.10; */
/* pragma experimental ABIEncoderV2; */

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

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

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

    function decimals() external pure returns (uint8);

    function totalSupply() external view returns (uint256);

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

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

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

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

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

    function DOMAIN_SEPARATOR() external view returns (bytes32);

    function PERMIT_TYPEHASH() external pure returns (bytes32);

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

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

    event Mint(address indexed sender, uint256 amount0, uint256 amount1);
    event Burn(
        address indexed sender,
        uint256 amount0,
        uint256 amount1,
        address indexed to
    );
    event Swap(
        address indexed sender,
        uint256 amount0In,
        uint256 amount1In,
        uint256 amount0Out,
        uint256 amount1Out,
        address indexed to
    );
    event Sync(uint112 reserve0, uint112 reserve1);

    function MINIMUM_LIQUIDITY() external pure returns (uint256);

    function factory() external view returns (address);

    function token0() external view returns (address);

    function token1() external view returns (address);

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

    function price0CumulativeLast() external view returns (uint256);

    function price1CumulativeLast() external view returns (uint256);

    function kLast() external view returns (uint256);

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

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

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

    function skim(address to) external;

    function sync() external;

    function initialize(address, address) external;
}

interface IUniswapV2Router02 {
    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 swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint256 amountIn,
        uint256 amountOutMin,
        address[] calldata path,
        address to,
        uint256 deadline
    ) external;

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

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

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

    IUniswapV2Router02 public immutable uniswapV2Router;
    address public immutable uniswapV2Pair;
    address public constant deadAddress = address(0xdead);

    bool private swapping;

    address public revShareWallet;
    address public teamWallet;

    uint256 public maxTransactionAmount;
    uint256 public swapTokensAtAmount;
    uint256 public maxWallet;

    bool public limitsInEffect = true;
    bool public tradingActive = true;
    bool public swapEnabled = true;

    uint256 public buyTotalFees;
    uint256 public buyRevShareFee;
    uint256 public buyLiquidityFee;
    uint256 public buyTeamFee;

    uint256 public sellTotalFees;
    uint256 public sellRevShareFee;
    uint256 public sellLiquidityFee;
    uint256 public sellTeamFee;

    uint256 public tokensForRevShare;
    uint256 public tokensForLiquidity;
    uint256 public tokensForTeam;

    /******************/

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

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

    bool public preListingPhase = false;
    mapping(address => bool) public preListingTransferrable;

    event UpdateUniswapV2Router(
        address indexed newAddress,
        address indexed oldAddress
    );

    event ExcludeFromFees(address indexed account, bool isExcluded);

    event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value);

    event revShareWalletUpdated(
        address indexed newWallet,
        address indexed oldWallet
    );

    event teamWalletUpdated(
        address indexed newWallet,
        address indexed oldWallet
    );

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

    constructor() ERC20("GameFinity", "GFN") {
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(
            0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D
        );

        excludeFromMaxTransaction(address(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D), true);
        uniswapV2Router = _uniswapV2Router;

        uniswapV2Pair = IUniswapV2Factory(0x5C69bEe701ef814a2B6a3EDD4B1652CB9cc5aA6f)
            .createPair(address(this), _uniswapV2Router.WETH());
        excludeFromMaxTransaction(address(uniswapV2Pair), true);
        _setAutomatedMarketMakerPair(address(uniswapV2Pair), true);

        uint256 _buyRevShareFee = 4;
        uint256 _buyLiquidityFee = 0;
        uint256 _buyTeamFee = 1;

        uint256 _sellRevShareFee = 4;
        uint256 _sellLiquidityFee = 0;
        uint256 _sellTeamFee = 1;

        uint256 totalSupply = 1_000_000 * 1e18;

        maxTransactionAmount = 20_000 * 1e18; // 2%
        maxWallet = 20_000 * 1e18; // 2%
        swapTokensAtAmount = (totalSupply * 1) / 500; // 0.2%

        buyRevShareFee = _buyRevShareFee;
        buyLiquidityFee = _buyLiquidityFee;
        buyTeamFee = _buyTeamFee;
        buyTotalFees = buyRevShareFee + buyLiquidityFee + buyTeamFee;

        sellRevShareFee = _sellRevShareFee;
        sellLiquidityFee = _sellLiquidityFee;
        sellTeamFee = _sellTeamFee;
        sellTotalFees = sellRevShareFee + sellLiquidityFee + sellTeamFee;

        revShareWallet = address(0x97B0Cb0165dB4CD656c586ACfF9F60d94792B971); // set as MW wallet
        teamWallet = address(0xc9d394061695505540A0Be0f6B1703D6Af0bAfa0); // set as Team wallet

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

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

        excludeFromFees(revShareWallet, true);
        excludeFromFees(teamWallet, true);

        excludeFromMaxTransaction(revShareWallet, true);
        excludeFromMaxTransaction(teamWallet, true);

        preListingTransferrable[owner()] = true;

        /*
            _mint is an internal function in ERC20.sol that is only called here,
            and CANNOT be called ever again
        */
        _mint(msg.sender, totalSupply);
    }

    receive() external payable {}

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

    // remove limits after token is stable
    function removeLimits() external onlyOwner returns (bool) {
        limitsInEffect = false;
        return true;
    }

    // change the minimum amount of tokens to sell from fees
    function updateSwapTokensAtAmount(uint256 newAmount)
        external
        onlyOwner
        returns (bool)
    {
        require(
            newAmount >= (totalSupply() * 1) / 100000,
            "Swap amount cannot be lower than 0.001% total supply."
        );
        require(
            newAmount <= (totalSupply() * 1) / 100,
            "Swap amount cannot be higher than 1.0% total supply."
        );
        swapTokensAtAmount = newAmount;
        return true;
    }

    function updateMaxTxnAmount(uint256 newNum) external onlyOwner {
        require(
            newNum >= ((totalSupply() * 5) / 1000) / 1e18,
            "Cannot set maxTransactionAmount lower than 0.5%"
        );
        maxTransactionAmount = newNum * (10**18);
    }

    function updateMaxWalletAmount(uint256 newNum) external onlyOwner {
        require(
            newNum >= ((totalSupply() * 10) / 1000) / 1e18,
            "Cannot set maxWallet lower than 1.0%"
        );
        maxWallet = newNum * (10**18);
    }

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

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

    function updateBuyFees(
        uint256 _revShareFee,
        uint256 _liquidityFee,
        uint256 _teamFee
    ) external onlyOwner {
        buyRevShareFee = _revShareFee;
        buyLiquidityFee = _liquidityFee;
        buyTeamFee = _teamFee;
        buyTotalFees = buyRevShareFee + buyLiquidityFee + buyTeamFee;
        require(buyTotalFees <= 35, "Buy fees must be <= 35.");
    }

    function updateSellFees(
        uint256 _revShareFee,
        uint256 _liquidityFee,
        uint256 _teamFee
    ) external onlyOwner {
        sellRevShareFee = _revShareFee;
        sellLiquidityFee = _liquidityFee;
        sellTeamFee = _teamFee;
        sellTotalFees = sellRevShareFee + sellLiquidityFee + sellTeamFee;
        require(sellTotalFees <= 35, "Sell fees must be <= 35.");
    }

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

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

        _setAutomatedMarketMakerPair(pair, value);
    }

    function _setAutomatedMarketMakerPair(address pair, bool value) private {
        automatedMarketMakerPairs[pair] = value;

        emit SetAutomatedMarketMakerPair(pair, value);
    }

    function updateRevShareWallet(address newRevShareWallet) external onlyOwner {
        emit revShareWalletUpdated(newRevShareWallet, revShareWallet);
        revShareWallet = newRevShareWallet;
    }

    function updateTeamWallet(address newWallet) external onlyOwner {
        emit teamWalletUpdated(newWallet, teamWallet);
        teamWallet = newWallet;
    }

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

    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal override {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");

        if (preListingPhase) {
            require(preListingTransferrable[from], "Not authorized to transfer pre-listing.");
        }

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

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

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

        uint256 contractTokenBalance = balanceOf(address(this));

        bool canSwap = contractTokenBalance >= swapTokensAtAmount;

        if (
            canSwap &&
            swapEnabled &&
            !swapping &&
            !automatedMarketMakerPairs[from] &&
            !_isExcludedFromFees[from] &&
            !_isExcludedFromFees[to]
        ) {
            swapping = true;

            swapBack();

            swapping = false;
        }

        bool takeFee = !swapping;

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

        uint256 fees = 0;
        // only take fees on buys/sells, do not take on wallet transfers
        if (takeFee) {
            // on sell
            if (automatedMarketMakerPairs[to] && sellTotalFees > 0) {
                fees = amount.mul(sellTotalFees).div(100);
                tokensForLiquidity += (fees * sellLiquidityFee) / sellTotalFees;
                tokensForTeam += (fees * sellTeamFee) / sellTotalFees;
                tokensForRevShare += (fees * sellRevShareFee) / sellTotalFees;
            }
            // on buy
            else if (automatedMarketMakerPairs[from] && buyTotalFees > 0) {
                fees = amount.mul(buyTotalFees).div(100);
                tokensForLiquidity += (fees * buyLiquidityFee) / buyTotalFees;
                tokensForTeam += (fees * buyTeamFee) / buyTotalFees;
                tokensForRevShare += (fees * buyRevShareFee) / buyTotalFees;
            }

            if (fees > 0) {
                super._transfer(from, address(this), fees);
            }

            amount -= fees;
        }

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

    function swapTokensForEth(uint256 tokenAmount) private {
        // generate the uniswap pair path of token -> weth
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();

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

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

    function addLiquidity(uint256 tokenAmount, uint256 ethAmount) private {
        // approve token transfer to cover all possible scenarios
        _approve(address(this), address(uniswapV2Router), tokenAmount);

        // add the liquidity
        uniswapV2Router.addLiquidityETH{value: ethAmount}(
            address(this),
            tokenAmount,
            0, // slippage is unavoidable
            0, // slippage is unavoidable
            owner(),
            block.timestamp
        );
    }

    function swapBack() private {
        uint256 contractBalance = balanceOf(address(this));
        uint256 totalTokensToSwap = tokensForLiquidity +
            tokensForRevShare +
            tokensForTeam;
        bool success;

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

        if (contractBalance > swapTokensAtAmount * 20) {
            contractBalance = swapTokensAtAmount * 20;
        }

        // Halve the amount of liquidity tokens
        uint256 liquidityTokens = (contractBalance * tokensForLiquidity) /
            totalTokensToSwap /
            2;
        uint256 amountToSwapForETH = contractBalance.sub(liquidityTokens);

        uint256 initialETHBalance = address(this).balance;

        swapTokensForEth(amountToSwapForETH);

        uint256 ethBalance = address(this).balance.sub(initialETHBalance);

        uint256 ethForRevShare = ethBalance.mul(tokensForRevShare).div(totalTokensToSwap - (tokensForLiquidity / 2));

        uint256 ethForTeam = ethBalance.mul(tokensForTeam).div(totalTokensToSwap - (tokensForLiquidity / 2));

        uint256 ethForLiquidity = ethBalance - ethForRevShare - ethForTeam;

        tokensForLiquidity = 0;
        tokensForRevShare = 0;
        tokensForTeam = 0;

        (success, ) = address(teamWallet).call{value: ethForTeam}("");

        if (liquidityTokens > 0 && ethForLiquidity > 0) {
            addLiquidity(liquidityTokens, ethForLiquidity);
            emit SwapAndLiquify(
                amountToSwapForETH,
                ethForLiquidity,
                tokensForLiquidity
            );
        }

        (success, ) = address(revShareWallet).call{value: address(this).balance}("");
    }

    function withdrawStuckToken() external onlyOwner {
        uint256 balance = IERC20(address(this)).balanceOf(address(this));
        IERC20(address(this)).transfer(msg.sender, balance);
        payable(msg.sender).transfer(address(this).balance);
    }

    function withdrawStuckToken(address _token, address _to) external onlyOwner {
        require(_token != address(0), "_token address cannot be 0");
        uint256 _contractBalance = IERC20(_token).balanceOf(address(this));
        IERC20(_token).transfer(_to, _contractBalance);
    }

    function withdrawStuckEth(address toAddr) external onlyOwner {
        (bool success, ) = toAddr.call{
            value: address(this).balance
        } ("");
        require(success);
    }

    function setPreListingTransferable(address _addr, bool isAuthorized) public onlyOwner {
        preListingTransferrable[_addr] = isAuthorized;
        excludeFromFees(_addr, isAuthorized);
        excludeFromMaxTransaction(_addr, isAuthorized);
    }
}

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":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","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":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiquidity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newAddress","type":"address"},{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"}],"name":"UpdateUniswapV2Router","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"revShareWalletUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"teamWalletUpdated","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyRevShareFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTeamFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransactionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"preListingPhase","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"preListingTransferrable","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"revShareWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellRevShareFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTeamFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_addr","type":"address"},{"internalType":"bool","name":"isAuthorized","type":"bool"}],"name":"setPreListingTransferable","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"teamWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForLiquidity","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForRevShare","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForTeam","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_revShareFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_teamFee","type":"uint256"}],"name":"updateBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxTxnAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newRevShareWallet","type":"address"}],"name":"updateRevShareWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_revShareFee","type":"uint256"},{"internalType":"uint256","name":"_liquidityFee","type":"uint256"},{"internalType":"uint256","name":"_teamFee","type":"uint256"}],"name":"updateSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"updateSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateSwapTokensAtAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"updateTeamWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"toAddr","type":"address"}],"name":"withdrawStuckEth","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawStuckToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"address","name":"_to","type":"address"}],"name":"withdrawStuckToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c06040526001600b5f6101000a81548160ff0219169083151502179055506001600b60016101000a81548160ff0219169083151502179055506001600b60026101000a81548160ff0219169083151502179055505f601a5f6101000a81548160ff02191690831515021790555034801562000079575f80fd5b506040518060400160405280600a81526020017f47616d6546696e697479000000000000000000000000000000000000000000008152506040518060400160405280600381526020017f47464e00000000000000000000000000000000000000000000000000000000008152508160039081620000f7919062000dfd565b50806004908162000109919062000dfd565b5050506200012c620001206200067160201b60201c565b6200067860201b60201c565b5f737a250d5630b4cf539739df2c5dacb4c659f2488d90506200016b737a250d5630b4cf539739df2c5dacb4c659f2488d60016200073b60201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff1681525050735c69bee701ef814a2b6a3edd4b1652cb9cc5aa6f73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200021a573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062000240919062000f46565b6040518363ffffffff1660e01b81526004016200025f92919062000f87565b6020604051808303815f875af11580156200027c573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620002a2919062000f46565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff1681525050620002ea60a05160016200073b60201b60201c565b620002ff60a05160016200082260201b60201c565b5f600490505f80600190505f600490505f80600190505f69d3c21bcecceda1000000905069043c33c193756480000060088190555069043c33c1937564800000600a819055506101f460018262000357919062000fdf565b62000363919062001056565b60098190555086600d8190555085600e8190555084600f81905550600f54600e54600d546200039391906200108d565b6200039f91906200108d565b600c81905550836011819055508260128190555081601381905550601354601254601154620003cf91906200108d565b620003db91906200108d565b6010819055507397b0cb0165db4cd656c586acff9f60d94792b97160065f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073c9d394061695505540a0be0f6b1703d6af0bafa060075f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620004ab6200049d620008c060201b60201c565b6001620008e860201b60201c565b620004be306001620008e860201b60201c565b620004d361dead6001620008e860201b60201c565b620004f5620004e7620008c060201b60201c565b60016200073b60201b60201c565b620005083060016200073b60201b60201c565b6200051d61dead60016200073b60201b60201c565b6200055160065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001620008e860201b60201c565b6200058560075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001620008e860201b60201c565b620005b960065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016200073b60201b60201c565b620005ed60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016200073b60201b60201c565b6001601b5f62000602620008c060201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff02191690831515021790555062000663338262000a1f60201b60201c565b505050505050505062001216565b5f33905090565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6200074b6200067160201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1662000771620008c060201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1614620007ca576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620007c19062001125565b60405180910390fd5b8060185f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b8060195f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b620008f86200067160201b60201c565b73ffffffffffffffffffffffffffffffffffffffff166200091e620008c060201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000977576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200096e9062001125565b60405180910390fd5b8060175f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df78260405162000a13919062001161565b60405180910390a25050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362000a90576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000a8790620011ca565b60405180910390fd5b62000aa35f838362000b8f60201b60201c565b8060025f82825462000ab691906200108d565b92505081905550805f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825462000b0a91906200108d565b925050819055508173ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000b709190620011fb565b60405180910390a362000b8b5f838362000b9460201b60201c565b5050565b505050565b505050565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168062000c1557607f821691505b60208210810362000c2b5762000c2a62000bd0565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f6008830262000c8f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000c52565b62000c9b868362000c52565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f62000ce562000cdf62000cd98462000cb3565b62000cbc565b62000cb3565b9050919050565b5f819050919050565b62000d008362000cc5565b62000d1862000d0f8262000cec565b84845462000c5e565b825550505050565b5f90565b62000d2e62000d20565b62000d3b81848462000cf5565b505050565b5b8181101562000d625762000d565f8262000d24565b60018101905062000d41565b5050565b601f82111562000db15762000d7b8162000c31565b62000d868462000c43565b8101602085101562000d96578190505b62000dae62000da58562000c43565b83018262000d40565b50505b505050565b5f82821c905092915050565b5f62000dd35f198460080262000db6565b1980831691505092915050565b5f62000ded838362000dc2565b9150826002028217905092915050565b62000e088262000b99565b67ffffffffffffffff81111562000e245762000e2362000ba3565b5b62000e30825462000bfd565b62000e3d82828562000d66565b5f60209050601f83116001811462000e73575f841562000e5e578287015190505b62000e6a858262000de0565b86555062000ed9565b601f19841662000e838662000c31565b5f5b8281101562000eac5784890151825560018201915060208501945060208101905062000e85565b8683101562000ecc578489015162000ec8601f89168262000dc2565b8355505b6001600288020188555050505b505050505050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f62000f108262000ee5565b9050919050565b62000f228162000f04565b811462000f2d575f80fd5b50565b5f8151905062000f408162000f17565b92915050565b5f6020828403121562000f5e5762000f5d62000ee1565b5b5f62000f6d8482850162000f30565b91505092915050565b62000f818162000f04565b82525050565b5f60408201905062000f9c5f83018562000f76565b62000fab602083018462000f76565b9392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f62000feb8262000cb3565b915062000ff88362000cb3565b9250828202620010088162000cb3565b9150828204841483151762001022576200102162000fb2565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f620010628262000cb3565b91506200106f8362000cb3565b92508262001082576200108162001029565b5b828204905092915050565b5f620010998262000cb3565b9150620010a68362000cb3565b9250828201905080821115620010c157620010c062000fb2565b5b92915050565b5f82825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f6200110d602083620010c7565b91506200111a82620010d7565b602082019050919050565b5f6020820190508181035f8301526200113e81620010ff565b9050919050565b5f8115159050919050565b6200115b8162001145565b82525050565b5f602082019050620011765f83018462001150565b92915050565b7f45524332303a206d696e7420746f20746865207a65726f2061646472657373005f82015250565b5f620011b2601f83620010c7565b9150620011bf826200117c565b602082019050919050565b5f6020820190508181035f830152620011e381620011a4565b9050919050565b620011f58162000cb3565b82525050565b5f602082019050620012105f830184620011ea565b92915050565b60805160a051615488620012625f395f81816111770152611c2f01525f8181610e8201528181613cea01528181613dc901528181613df001528181613e860152613ead01526154885ff3fe608060405260043610610384575f3560e01c80638095d564116101d0578063c024666811610101578063dd62ed3e1161009f578063f2fde38b1161006e578063f2fde38b14610ced578063f637434214610d15578063f8b45b0514610d3f578063fde83a3414610d695761038b565b8063dd62ed3e14610c35578063e2f4560514610c71578063e82493a914610c9b578063f11a24d314610cc35761038b565b8063c8c8ebe4116100db578063c8c8ebe414610b7b578063d257b34f14610ba5578063d729715f14610be1578063d85ba06314610c0b5761038b565b8063c024666814610b03578063c17b5b8c14610b2b578063c18bc19514610b535761038b565b80639c2e4ac61161016e578063adee28ff11610148578063adee28ff14610a4d578063b62496f514610a75578063bbc0c74214610ab1578063bc205ad314610adb5761038b565b80639c2e4ac6146109ab578063a457c2d7146109d5578063a9059cbb14610a115761038b565b80638da5cb5b116101aa5780638da5cb5b14610907578063924de9b71461093157806395d89b41146109595780639a7a23d6146109835761038b565b80638095d564146108b357806384dd4452146108db5780638a8c523c146108f15761038b565b806339509351116102b55780636ddd1713116102535780637571336a116102225780637571336a14610811578063782c4e99146108395780637ca8448a146108635780637cb332bb1461088b5761038b565b80636ddd17131461076b57806370a0823114610795578063715018a6146107d1578063751039fc146107e75761038b565b80634fbee1931161028f5780634fbee193146106b157806359927044146106ed5780636490015c146107175780636a486a8e146107415761038b565b8063395093511461062157806349bd5a5e1461065d5780634a62bb65146106875761038b565b806319eab0421161032257806323b872dd116102fc57806323b872dd1461056757806324b9f3c1146105a357806327c8f835146105cd578063313ce567146105f75761038b565b806319eab042146104eb5780631a8145bb14610515578063203e727e1461053f5761038b565b806310d5de531161035e57806310d5de5314610431578063156c2f351461046d5780631694505e1461049757806318160ddd146104c15761038b565b806304fa50c21461038f57806306fdde03146103cb578063095ea7b3146103f55761038b565b3661038b57005b5f80fd5b34801561039a575f80fd5b506103b560048036038101906103b09190613fbc565b610d93565b6040516103c29190614001565b60405180910390f35b3480156103d6575f80fd5b506103df610db0565b6040516103ec91906140a4565b60405180910390f35b348015610400575f80fd5b5061041b600480360381019061041691906140f7565b610e40565b6040516104289190614001565b60405180910390f35b34801561043c575f80fd5b5061045760048036038101906104529190613fbc565b610e5d565b6040516104649190614001565b60405180910390f35b348015610478575f80fd5b50610481610e7a565b60405161048e9190614144565b60405180910390f35b3480156104a2575f80fd5b506104ab610e80565b6040516104b891906141b8565b60405180910390f35b3480156104cc575f80fd5b506104d5610ea4565b6040516104e29190614144565b60405180910390f35b3480156104f6575f80fd5b506104ff610ead565b60405161050c9190614144565b60405180910390f35b348015610520575f80fd5b50610529610eb3565b6040516105369190614144565b60405180910390f35b34801561054a575f80fd5b50610565600480360381019061056091906141d1565b610eb9565b005b348015610572575f80fd5b5061058d600480360381019061058891906141fc565b610fc8565b60405161059a9190614001565b60405180910390f35b3480156105ae575f80fd5b506105b76110ba565b6040516105c49190614144565b60405180910390f35b3480156105d8575f80fd5b506105e16110c0565b6040516105ee919061425b565b60405180910390f35b348015610602575f80fd5b5061060b6110c6565b604051610618919061428f565b60405180910390f35b34801561062c575f80fd5b50610647600480360381019061064291906140f7565b6110ce565b6040516106549190614001565b60405180910390f35b348015610668575f80fd5b50610671611175565b60405161067e919061425b565b60405180910390f35b348015610692575f80fd5b5061069b611199565b6040516106a89190614001565b60405180910390f35b3480156106bc575f80fd5b506106d760048036038101906106d29190613fbc565b6111ab565b6040516106e49190614001565b60405180910390f35b3480156106f8575f80fd5b506107016111fd565b60405161070e919061425b565b60405180910390f35b348015610722575f80fd5b5061072b611222565b6040516107389190614001565b60405180910390f35b34801561074c575f80fd5b50610755611234565b6040516107629190614144565b60405180910390f35b348015610776575f80fd5b5061077f61123a565b60405161078c9190614001565b60405180910390f35b3480156107a0575f80fd5b506107bb60048036038101906107b69190613fbc565b61124d565b6040516107c89190614144565b60405180910390f35b3480156107dc575f80fd5b506107e5611292565b005b3480156107f2575f80fd5b506107fb611319565b6040516108089190614001565b60405180910390f35b34801561081c575f80fd5b50610837600480360381019061083291906142d2565b6113b6565b005b348015610844575f80fd5b5061084d61148a565b60405161085a919061425b565b60405180910390f35b34801561086e575f80fd5b5061088960048036038101906108849190613fbc565b6114af565b005b348015610896575f80fd5b506108b160048036038101906108ac9190613fbc565b6115a0565b005b3480156108be575f80fd5b506108d960048036038101906108d49190614310565b6116da565b005b3480156108e6575f80fd5b506108ef6117d9565b005b3480156108fc575f80fd5b50610905611993565b005b348015610912575f80fd5b5061091b611a60565b604051610928919061425b565b60405180910390f35b34801561093c575f80fd5b5061095760048036038101906109529190614360565b611a88565b005b348015610964575f80fd5b5061096d611b21565b60405161097a91906140a4565b60405180910390f35b34801561098e575f80fd5b506109a960048036038101906109a491906142d2565b611bb1565b005b3480156109b6575f80fd5b506109bf611cc9565b6040516109cc9190614144565b60405180910390f35b3480156109e0575f80fd5b506109fb60048036038101906109f691906140f7565b611ccf565b604051610a089190614001565b60405180910390f35b348015610a1c575f80fd5b50610a376004803603810190610a3291906140f7565b611db5565b604051610a449190614001565b60405180910390f35b348015610a58575f80fd5b50610a736004803603810190610a6e9190613fbc565b611dd2565b005b348015610a80575f80fd5b50610a9b6004803603810190610a969190613fbc565b611f0c565b604051610aa89190614001565b60405180910390f35b348015610abc575f80fd5b50610ac5611f29565b604051610ad29190614001565b60405180910390f35b348015610ae6575f80fd5b50610b016004803603810190610afc919061438b565b611f3c565b005b348015610b0e575f80fd5b50610b296004803603810190610b2491906142d2565b612122565b005b348015610b36575f80fd5b50610b516004803603810190610b4c9190614310565b612244565b005b348015610b5e575f80fd5b50610b796004803603810190610b7491906141d1565b612343565b005b348015610b86575f80fd5b50610b8f612452565b604051610b9c9190614144565b60405180910390f35b348015610bb0575f80fd5b50610bcb6004803603810190610bc691906141d1565b612458565b604051610bd89190614001565b60405180910390f35b348015610bec575f80fd5b50610bf56125ab565b604051610c029190614144565b60405180910390f35b348015610c16575f80fd5b50610c1f6125b1565b604051610c2c9190614144565b60405180910390f35b348015610c40575f80fd5b50610c5b6004803603810190610c56919061438b565b6125b7565b604051610c689190614144565b60405180910390f35b348015610c7c575f80fd5b50610c85612639565b604051610c929190614144565b60405180910390f35b348015610ca6575f80fd5b50610cc16004803603810190610cbc91906142d2565b61263f565b005b348015610cce575f80fd5b50610cd7612727565b604051610ce49190614144565b60405180910390f35b348015610cf8575f80fd5b50610d136004803603810190610d0e9190613fbc565b61272d565b005b348015610d20575f80fd5b50610d29612823565b604051610d369190614144565b60405180910390f35b348015610d4a575f80fd5b50610d53612829565b604051610d609190614144565b60405180910390f35b348015610d74575f80fd5b50610d7d61282f565b604051610d8a9190614144565b60405180910390f35b601b602052805f5260405f205f915054906101000a900460ff1681565b606060038054610dbf906143f6565b80601f0160208091040260200160405190810160405280929190818152602001828054610deb906143f6565b8015610e365780601f10610e0d57610100808354040283529160200191610e36565b820191905f5260205f20905b815481529060010190602001808311610e1957829003601f168201915b5050505050905090565b5f610e53610e4c612835565b848461283c565b6001905092915050565b6018602052805f5260405f205f915054906101000a900460ff1681565b600d5481565b7f000000000000000000000000000000000000000000000000000000000000000081565b5f600254905090565b60115481565b60155481565b610ec1612835565b73ffffffffffffffffffffffffffffffffffffffff16610edf611a60565b73ffffffffffffffffffffffffffffffffffffffff1614610f35576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f2c90614470565b60405180910390fd5b670de0b6b3a76400006103e86005610f4b610ea4565b610f5591906144bb565b610f5f9190614529565b610f699190614529565b811015610fab576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fa2906145c9565b60405180910390fd5b670de0b6b3a764000081610fbf91906144bb565b60088190555050565b5f610fd48484846129ff565b5f60015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f61101b612835565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205490508281101561109a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161109190614657565b60405180910390fd5b6110ae856110a6612835565b85840361283c565b60019150509392505050565b60145481565b61dead81565b5f6012905090565b5f61116b6110da612835565b848460015f6110e7612835565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546111669190614675565b61283c565b6001905092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b600b5f9054906101000a900460ff1681565b5f60175f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169050919050565b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601a5f9054906101000a900460ff1681565b60105481565b600b60029054906101000a900460ff1681565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b61129a612835565b73ffffffffffffffffffffffffffffffffffffffff166112b8611a60565b73ffffffffffffffffffffffffffffffffffffffff161461130e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161130590614470565b60405180910390fd5b6113175f61352d565b565b5f611322612835565b73ffffffffffffffffffffffffffffffffffffffff16611340611a60565b73ffffffffffffffffffffffffffffffffffffffff1614611396576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161138d90614470565b60405180910390fd5b5f600b5f6101000a81548160ff0219169083151502179055506001905090565b6113be612835565b73ffffffffffffffffffffffffffffffffffffffff166113dc611a60565b73ffffffffffffffffffffffffffffffffffffffff1614611432576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161142990614470565b60405180910390fd5b8060185f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6114b7612835565b73ffffffffffffffffffffffffffffffffffffffff166114d5611a60565b73ffffffffffffffffffffffffffffffffffffffff161461152b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161152290614470565b60405180910390fd5b5f8173ffffffffffffffffffffffffffffffffffffffff1647604051611550906146d5565b5f6040518083038185875af1925050503d805f811461158a576040519150601f19603f3d011682016040523d82523d5f602084013e61158f565b606091505b505090508061159c575f80fd5b5050565b6115a8612835565b73ffffffffffffffffffffffffffffffffffffffff166115c6611a60565b73ffffffffffffffffffffffffffffffffffffffff161461161c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161161390614470565b60405180910390fd5b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8aa0f85050aca99be43beb823e0457e77966b3baf697a289b03681978f96166860405160405180910390a38060075f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6116e2612835565b73ffffffffffffffffffffffffffffffffffffffff16611700611a60565b73ffffffffffffffffffffffffffffffffffffffff1614611756576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161174d90614470565b60405180910390fd5b82600d8190555081600e8190555080600f81905550600f54600e54600d5461177e9190614675565b6117889190614675565b600c819055506023600c5411156117d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117cb90614733565b60405180910390fd5b505050565b6117e1612835565b73ffffffffffffffffffffffffffffffffffffffff166117ff611a60565b73ffffffffffffffffffffffffffffffffffffffff1614611855576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161184c90614470565b60405180910390fd5b5f3073ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161188f919061425b565b602060405180830381865afa1580156118aa573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906118ce9190614765565b90503073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b815260040161190b929190614790565b6020604051808303815f875af1158015611927573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061194b91906147cb565b503373ffffffffffffffffffffffffffffffffffffffff166108fc4790811502906040515f60405180830381858888f1935050505015801561198f573d5f803e3d5ffd5b5050565b61199b612835565b73ffffffffffffffffffffffffffffffffffffffff166119b9611a60565b73ffffffffffffffffffffffffffffffffffffffff1614611a0f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a0690614470565b60405180910390fd5b6001600b60016101000a81548160ff0219169083151502179055506001600b60026101000a81548160ff0219169083151502179055505f601a5f6101000a81548160ff021916908315150217905550565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611a90612835565b73ffffffffffffffffffffffffffffffffffffffff16611aae611a60565b73ffffffffffffffffffffffffffffffffffffffff1614611b04576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611afb90614470565b60405180910390fd5b80600b60026101000a81548160ff02191690831515021790555050565b606060048054611b30906143f6565b80601f0160208091040260200160405190810160405280929190818152602001828054611b5c906143f6565b8015611ba75780601f10611b7e57610100808354040283529160200191611ba7565b820191905f5260205f20905b815481529060010190602001808311611b8a57829003601f168201915b5050505050905090565b611bb9612835565b73ffffffffffffffffffffffffffffffffffffffff16611bd7611a60565b73ffffffffffffffffffffffffffffffffffffffff1614611c2d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c2490614470565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611cbb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cb290614866565b60405180910390fd5b611cc582826135f0565b5050565b600f5481565b5f8060015f611cdc612835565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905082811015611d96576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d8d906148f4565b60405180910390fd5b611daa611da1612835565b8585840361283c565b600191505092915050565b5f611dc8611dc1612835565b84846129ff565b6001905092915050565b611dda612835565b73ffffffffffffffffffffffffffffffffffffffff16611df8611a60565b73ffffffffffffffffffffffffffffffffffffffff1614611e4e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e4590614470565b60405180910390fd5b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fc9f2d63eee8632b33d7a7db5252eb29036e81ee4fbe29260febe0c49ffb8a7bb60405160405180910390a38060065f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6019602052805f5260405f205f915054906101000a900460ff1681565b600b60019054906101000a900460ff1681565b611f44612835565b73ffffffffffffffffffffffffffffffffffffffff16611f62611a60565b73ffffffffffffffffffffffffffffffffffffffff1614611fb8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611faf90614470565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612026576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161201d9061495c565b60405180910390fd5b5f8273ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401612060919061425b565b602060405180830381865afa15801561207b573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061209f9190614765565b90508273ffffffffffffffffffffffffffffffffffffffff1663a9059cbb83836040518363ffffffff1660e01b81526004016120dc929190614790565b6020604051808303815f875af11580156120f8573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061211c91906147cb565b50505050565b61212a612835565b73ffffffffffffffffffffffffffffffffffffffff16612148611a60565b73ffffffffffffffffffffffffffffffffffffffff161461219e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161219590614470565b60405180910390fd5b8060175f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7826040516122389190614001565b60405180910390a25050565b61224c612835565b73ffffffffffffffffffffffffffffffffffffffff1661226a611a60565b73ffffffffffffffffffffffffffffffffffffffff16146122c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122b790614470565b60405180910390fd5b8260118190555081601281905550806013819055506013546012546011546122e89190614675565b6122f29190614675565b6010819055506023601054111561233e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612335906149c4565b60405180910390fd5b505050565b61234b612835565b73ffffffffffffffffffffffffffffffffffffffff16612369611a60565b73ffffffffffffffffffffffffffffffffffffffff16146123bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123b690614470565b60405180910390fd5b670de0b6b3a76400006103e8600a6123d5610ea4565b6123df91906144bb565b6123e99190614529565b6123f39190614529565b811015612435576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161242c90614a52565b60405180910390fd5b670de0b6b3a76400008161244991906144bb565b600a8190555050565b60085481565b5f612461612835565b73ffffffffffffffffffffffffffffffffffffffff1661247f611a60565b73ffffffffffffffffffffffffffffffffffffffff16146124d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124cc90614470565b60405180910390fd5b620186a060016124e3610ea4565b6124ed91906144bb565b6124f79190614529565b821015612539576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161253090614ae0565b60405180910390fd5b60646001612545610ea4565b61254f91906144bb565b6125599190614529565b82111561259b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161259290614b6e565b60405180910390fd5b8160098190555060019050919050565b60135481565b600c5481565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b60095481565b612647612835565b73ffffffffffffffffffffffffffffffffffffffff16612665611a60565b73ffffffffffffffffffffffffffffffffffffffff16146126bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126b290614470565b60405180910390fd5b80601b5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055506127198282612122565b61272382826113b6565b5050565b600e5481565b612735612835565b73ffffffffffffffffffffffffffffffffffffffff16612753611a60565b73ffffffffffffffffffffffffffffffffffffffff16146127a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127a090614470565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612817576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161280e90614bfc565b60405180910390fd5b6128208161352d565b50565b60125481565b600a5481565b60165481565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036128aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128a190614c8a565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612918576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161290f90614d18565b60405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516129f29190614144565b60405180910390a3505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612a6d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a6490614da6565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612adb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ad290614e34565b60405180910390fd5b601a5f9054906101000a900460ff1615612b7957601b5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16612b78576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b6f90614ec2565b60405180910390fd5b5b5f8103612b9057612b8b83835f61368e565b613528565b600b5f9054906101000a900460ff161561307457612bac611a60565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015612c1a5750612bea611a60565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612c5257505f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612c8c575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612ca55750600560149054906101000a900460ff16155b1561307357600b60019054906101000a900460ff16612d995760175f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680612d59575060175f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b612d98576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d8f90614f2a565b60405180910390fd5b5b60195f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015612e36575060185f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15612edd57600854811115612e80576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e7790614fb8565b60405180910390fd5b600a54612e8c8361124d565b82612e979190614675565b1115612ed8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ecf90615020565b60405180910390fd5b613072565b60195f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015612f7a575060185f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15612fc957600854811115612fc4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fbb906150ae565b60405180910390fd5b613071565b60185f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1661307057600a546130238361124d565b8261302e9190614675565b111561306f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161306690615020565b60405180910390fd5b5b5b5b5b5b5f61307e3061124d565b90505f60095482101590508080156130a25750600b60029054906101000a900460ff165b80156130bb5750600560149054906101000a900460ff16155b801561310e575060195f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b8015613161575060175f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b80156131b4575060175f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b156131f7576001600560146101000a81548160ff0219169083151502179055506131dc613903565b5f600560146101000a81548160ff0219169083151502179055505b5f600560149054906101000a900460ff1615905060175f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16806132a6575060175f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b156132af575f90505b5f81156135185760195f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16801561330d57505f601054115b156133d75761333a606461332c60105488613c0490919063ffffffff16565b613c1990919063ffffffff16565b90506010546012548261334d91906144bb565b6133579190614529565b60155f8282546133679190614675565b925050819055506010546013548261337f91906144bb565b6133899190614529565b60165f8282546133999190614675565b92505081905550601054601154826133b191906144bb565b6133bb9190614529565b60145f8282546133cb9190614675565b925050819055506134f5565b60195f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16801561342e57505f600c54115b156134f45761345b606461344d600c5488613c0490919063ffffffff16565b613c1990919063ffffffff16565b9050600c54600e548261346e91906144bb565b6134789190614529565b60155f8282546134889190614675565b92505081905550600c54600f54826134a091906144bb565b6134aa9190614529565b60165f8282546134ba9190614675565b92505081905550600c54600d54826134d291906144bb565b6134dc9190614529565b60145f8282546134ec9190614675565b925050819055505b5b5f8111156135095761350887308361368e565b5b808561351591906150cc565b94505b61352387878761368e565b505050505b505050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8060195f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036136fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016136f390614da6565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361376a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161376190614e34565b60405180910390fd5b613775838383613c2e565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050818110156137f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016137ef9061516f565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550815f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8282546138869190614675565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516138ea9190614144565b60405180910390a36138fd848484613c33565b50505050565b5f61390d3061124d565b90505f6016546014546015546139239190614675565b61392d9190614675565b90505f8083148061393d57505f82145b1561394a57505050613c02565b601460095461395991906144bb565b83111561397257601460095461396f91906144bb565b92505b5f6002836015548661398491906144bb565b61398e9190614529565b6139989190614529565b90505f6139ae8286613c3890919063ffffffff16565b90505f4790506139bd82613c4d565b5f6139d18247613c3890919063ffffffff16565b90505f613a1460026015546139e69190614529565b886139f191906150cc565b613a0660145485613c0490919063ffffffff16565b613c1990919063ffffffff16565b90505f613a576002601554613a299190614529565b89613a3491906150cc565b613a4960165486613c0490919063ffffffff16565b613c1990919063ffffffff16565b90505f818385613a6791906150cc565b613a7191906150cc565b90505f6015819055505f6014819055505f60168190555060075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1682604051613acd906146d5565b5f6040518083038185875af1925050503d805f8114613b07576040519150601f19603f3d011682016040523d82523d5f602084013e613b0c565b606091505b5050809850505f87118015613b2057505f81115b15613b6d57613b2f8782613e80565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5618682601554604051613b649392919061518d565b60405180910390a15b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051613bb2906146d5565b5f6040518083038185875af1925050503d805f8114613bec576040519150601f19603f3d011682016040523d82523d5f602084013e613bf1565b606091505b505080985050505050505050505050505b565b5f8183613c1191906144bb565b905092915050565b5f8183613c269190614529565b905092915050565b505050565b505050565b5f8183613c4591906150cc565b905092915050565b5f600267ffffffffffffffff811115613c6957613c686151c2565b5b604051908082528060200260200182016040528015613c975781602001602082028036833780820191505090505b50905030815f81518110613cae57613cad6151ef565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613d51573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613d759190615230565b81600181518110613d8957613d886151ef565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613dee307f00000000000000000000000000000000000000000000000000000000000000008461283c565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac947835f8430426040518663ffffffff1660e01b8152600401613e4f95949392919061534b565b5f604051808303815f87803b158015613e66575f80fd5b505af1158015613e78573d5f803e3d5ffd5b505050505050565b613eab307f00000000000000000000000000000000000000000000000000000000000000008461283c565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f305d7198230855f80613ef4611a60565b426040518863ffffffff1660e01b8152600401613f16969594939291906153a3565b60606040518083038185885af1158015613f32573d5f803e3d5ffd5b50505050506040513d601f19601f82011682018060405250810190613f579190615402565b5050505050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f613f8b82613f62565b9050919050565b613f9b81613f81565b8114613fa5575f80fd5b50565b5f81359050613fb681613f92565b92915050565b5f60208284031215613fd157613fd0613f5e565b5b5f613fde84828501613fa8565b91505092915050565b5f8115159050919050565b613ffb81613fe7565b82525050565b5f6020820190506140145f830184613ff2565b92915050565b5f81519050919050565b5f82825260208201905092915050565b5f5b83811015614051578082015181840152602081019050614036565b5f8484015250505050565b5f601f19601f8301169050919050565b5f6140768261401a565b6140808185614024565b9350614090818560208601614034565b6140998161405c565b840191505092915050565b5f6020820190508181035f8301526140bc818461406c565b905092915050565b5f819050919050565b6140d6816140c4565b81146140e0575f80fd5b50565b5f813590506140f1816140cd565b92915050565b5f806040838503121561410d5761410c613f5e565b5b5f61411a85828601613fa8565b925050602061412b858286016140e3565b9150509250929050565b61413e816140c4565b82525050565b5f6020820190506141575f830184614135565b92915050565b5f819050919050565b5f61418061417b61417684613f62565b61415d565b613f62565b9050919050565b5f61419182614166565b9050919050565b5f6141a282614187565b9050919050565b6141b281614198565b82525050565b5f6020820190506141cb5f8301846141a9565b92915050565b5f602082840312156141e6576141e5613f5e565b5b5f6141f3848285016140e3565b91505092915050565b5f805f6060848603121561421357614212613f5e565b5b5f61422086828701613fa8565b935050602061423186828701613fa8565b9250506040614242868287016140e3565b9150509250925092565b61425581613f81565b82525050565b5f60208201905061426e5f83018461424c565b92915050565b5f60ff82169050919050565b61428981614274565b82525050565b5f6020820190506142a25f830184614280565b92915050565b6142b181613fe7565b81146142bb575f80fd5b50565b5f813590506142cc816142a8565b92915050565b5f80604083850312156142e8576142e7613f5e565b5b5f6142f585828601613fa8565b9250506020614306858286016142be565b9150509250929050565b5f805f6060848603121561432757614326613f5e565b5b5f614334868287016140e3565b9350506020614345868287016140e3565b9250506040614356868287016140e3565b9150509250925092565b5f6020828403121561437557614374613f5e565b5b5f614382848285016142be565b91505092915050565b5f80604083850312156143a1576143a0613f5e565b5b5f6143ae85828601613fa8565b92505060206143bf85828601613fa8565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061440d57607f821691505b6020821081036144205761441f6143c9565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f61445a602083614024565b915061446582614426565b602082019050919050565b5f6020820190508181035f8301526144878161444e565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f6144c5826140c4565b91506144d0836140c4565b92508282026144de816140c4565b915082820484148315176144f5576144f461448e565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f614533826140c4565b915061453e836140c4565b92508261454e5761454d6144fc565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e74205f8201527f6c6f776572207468616e20302e35250000000000000000000000000000000000602082015250565b5f6145b3602f83614024565b91506145be82614559565b604082019050919050565b5f6020820190508181035f8301526145e0816145a7565b9050919050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320615f8201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b5f614641602883614024565b915061464c826145e7565b604082019050919050565b5f6020820190508181035f83015261466e81614635565b9050919050565b5f61467f826140c4565b915061468a836140c4565b92508282019050808211156146a2576146a161448e565b5b92915050565b5f81905092915050565b50565b5f6146c05f836146a8565b91506146cb826146b2565b5f82019050919050565b5f6146df826146b5565b9150819050919050565b7f4275792066656573206d757374206265203c3d2033352e0000000000000000005f82015250565b5f61471d601783614024565b9150614728826146e9565b602082019050919050565b5f6020820190508181035f83015261474a81614711565b9050919050565b5f8151905061475f816140cd565b92915050565b5f6020828403121561477a57614779613f5e565b5b5f61478784828501614751565b91505092915050565b5f6040820190506147a35f83018561424c565b6147b06020830184614135565b9392505050565b5f815190506147c5816142a8565b92915050565b5f602082840312156147e0576147df613f5e565b5b5f6147ed848285016147b7565b91505092915050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d205f8201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b5f614850603983614024565b915061485b826147f6565b604082019050919050565b5f6020820190508181035f83015261487d81614844565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f775f8201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b5f6148de602583614024565b91506148e982614884565b604082019050919050565b5f6020820190508181035f83015261490b816148d2565b9050919050565b7f5f746f6b656e20616464726573732063616e6e6f7420626520300000000000005f82015250565b5f614946601a83614024565b915061495182614912565b602082019050919050565b5f6020820190508181035f8301526149738161493a565b9050919050565b7f53656c6c2066656573206d757374206265203c3d2033352e00000000000000005f82015250565b5f6149ae601883614024565b91506149b98261497a565b602082019050919050565b5f6020820190508181035f8301526149db816149a2565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e205f8201527f312e302500000000000000000000000000000000000000000000000000000000602082015250565b5f614a3c602483614024565b9150614a47826149e2565b604082019050919050565b5f6020820190508181035f830152614a6981614a30565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e5f8201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b5f614aca603583614024565b9150614ad582614a70565b604082019050919050565b5f6020820190508181035f830152614af781614abe565b9050919050565b7f5377617020616d6f756e742063616e6e6f7420626520686967686572207468615f8201527f6e20312e302520746f74616c20737570706c792e000000000000000000000000602082015250565b5f614b58603483614024565b9150614b6382614afe565b604082019050919050565b5f6020820190508181035f830152614b8581614b4c565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f614be6602683614024565b9150614bf182614b8c565b604082019050919050565b5f6020820190508181035f830152614c1381614bda565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f614c74602483614024565b9150614c7f82614c1a565b604082019050919050565b5f6020820190508181035f830152614ca181614c68565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f614d02602283614024565b9150614d0d82614ca8565b604082019050919050565b5f6020820190508181035f830152614d2f81614cf6565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f614d90602583614024565b9150614d9b82614d36565b604082019050919050565b5f6020820190508181035f830152614dbd81614d84565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f614e1e602383614024565b9150614e2982614dc4565b604082019050919050565b5f6020820190508181035f830152614e4b81614e12565b9050919050565b7f4e6f7420617574686f72697a656420746f207472616e73666572207072652d6c5f8201527f697374696e672e00000000000000000000000000000000000000000000000000602082015250565b5f614eac602783614024565b9150614eb782614e52565b604082019050919050565b5f6020820190508181035f830152614ed981614ea0565b9050919050565b7f54726164696e67206973206e6f74206163746976652e000000000000000000005f82015250565b5f614f14601683614024565b9150614f1f82614ee0565b602082019050919050565b5f6020820190508181035f830152614f4181614f08565b9050919050565b7f427579207472616e7366657220616d6f756e74206578636565647320746865205f8201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b5f614fa2603583614024565b9150614fad82614f48565b604082019050919050565b5f6020820190508181035f830152614fcf81614f96565b9050919050565b7f4d61782077616c6c6574206578636565646564000000000000000000000000005f82015250565b5f61500a601383614024565b915061501582614fd6565b602082019050919050565b5f6020820190508181035f83015261503781614ffe565b9050919050565b7f53656c6c207472616e7366657220616d6f756e742065786365656473207468655f8201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b5f615098603683614024565b91506150a38261503e565b604082019050919050565b5f6020820190508181035f8301526150c58161508c565b9050919050565b5f6150d6826140c4565b91506150e1836140c4565b92508282039050818111156150f9576150f861448e565b5b92915050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320625f8201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b5f615159602683614024565b9150615164826150ff565b604082019050919050565b5f6020820190508181035f8301526151868161514d565b9050919050565b5f6060820190506151a05f830186614135565b6151ad6020830185614135565b6151ba6040830184614135565b949350505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f8151905061522a81613f92565b92915050565b5f6020828403121561524557615244613f5e565b5b5f6152528482850161521c565b91505092915050565b5f819050919050565b5f61527e6152796152748461525b565b61415d565b6140c4565b9050919050565b61528e81615264565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b6152c681613f81565b82525050565b5f6152d783836152bd565b60208301905092915050565b5f602082019050919050565b5f6152f982615294565b615303818561529e565b935061530e836152ae565b805f5b8381101561533e57815161532588826152cc565b9750615330836152e3565b925050600181019050615311565b5085935050505092915050565b5f60a08201905061535e5f830188614135565b61536b6020830187615285565b818103604083015261537d81866152ef565b905061538c606083018561424c565b6153996080830184614135565b9695505050505050565b5f60c0820190506153b65f83018961424c565b6153c36020830188614135565b6153d06040830187615285565b6153dd6060830186615285565b6153ea608083018561424c565b6153f760a0830184614135565b979650505050505050565b5f805f6060848603121561541957615418613f5e565b5b5f61542686828701614751565b935050602061543786828701614751565b925050604061544886828701614751565b915050925092509256fea26469706673582212202ad630763932b7adcb2210c4cad211bb23f6c1bcd2d5829c4e94d70b9b2e630364736f6c63430008140033

Deployed Bytecode

0x608060405260043610610384575f3560e01c80638095d564116101d0578063c024666811610101578063dd62ed3e1161009f578063f2fde38b1161006e578063f2fde38b14610ced578063f637434214610d15578063f8b45b0514610d3f578063fde83a3414610d695761038b565b8063dd62ed3e14610c35578063e2f4560514610c71578063e82493a914610c9b578063f11a24d314610cc35761038b565b8063c8c8ebe4116100db578063c8c8ebe414610b7b578063d257b34f14610ba5578063d729715f14610be1578063d85ba06314610c0b5761038b565b8063c024666814610b03578063c17b5b8c14610b2b578063c18bc19514610b535761038b565b80639c2e4ac61161016e578063adee28ff11610148578063adee28ff14610a4d578063b62496f514610a75578063bbc0c74214610ab1578063bc205ad314610adb5761038b565b80639c2e4ac6146109ab578063a457c2d7146109d5578063a9059cbb14610a115761038b565b80638da5cb5b116101aa5780638da5cb5b14610907578063924de9b71461093157806395d89b41146109595780639a7a23d6146109835761038b565b80638095d564146108b357806384dd4452146108db5780638a8c523c146108f15761038b565b806339509351116102b55780636ddd1713116102535780637571336a116102225780637571336a14610811578063782c4e99146108395780637ca8448a146108635780637cb332bb1461088b5761038b565b80636ddd17131461076b57806370a0823114610795578063715018a6146107d1578063751039fc146107e75761038b565b80634fbee1931161028f5780634fbee193146106b157806359927044146106ed5780636490015c146107175780636a486a8e146107415761038b565b8063395093511461062157806349bd5a5e1461065d5780634a62bb65146106875761038b565b806319eab0421161032257806323b872dd116102fc57806323b872dd1461056757806324b9f3c1146105a357806327c8f835146105cd578063313ce567146105f75761038b565b806319eab042146104eb5780631a8145bb14610515578063203e727e1461053f5761038b565b806310d5de531161035e57806310d5de5314610431578063156c2f351461046d5780631694505e1461049757806318160ddd146104c15761038b565b806304fa50c21461038f57806306fdde03146103cb578063095ea7b3146103f55761038b565b3661038b57005b5f80fd5b34801561039a575f80fd5b506103b560048036038101906103b09190613fbc565b610d93565b6040516103c29190614001565b60405180910390f35b3480156103d6575f80fd5b506103df610db0565b6040516103ec91906140a4565b60405180910390f35b348015610400575f80fd5b5061041b600480360381019061041691906140f7565b610e40565b6040516104289190614001565b60405180910390f35b34801561043c575f80fd5b5061045760048036038101906104529190613fbc565b610e5d565b6040516104649190614001565b60405180910390f35b348015610478575f80fd5b50610481610e7a565b60405161048e9190614144565b60405180910390f35b3480156104a2575f80fd5b506104ab610e80565b6040516104b891906141b8565b60405180910390f35b3480156104cc575f80fd5b506104d5610ea4565b6040516104e29190614144565b60405180910390f35b3480156104f6575f80fd5b506104ff610ead565b60405161050c9190614144565b60405180910390f35b348015610520575f80fd5b50610529610eb3565b6040516105369190614144565b60405180910390f35b34801561054a575f80fd5b50610565600480360381019061056091906141d1565b610eb9565b005b348015610572575f80fd5b5061058d600480360381019061058891906141fc565b610fc8565b60405161059a9190614001565b60405180910390f35b3480156105ae575f80fd5b506105b76110ba565b6040516105c49190614144565b60405180910390f35b3480156105d8575f80fd5b506105e16110c0565b6040516105ee919061425b565b60405180910390f35b348015610602575f80fd5b5061060b6110c6565b604051610618919061428f565b60405180910390f35b34801561062c575f80fd5b50610647600480360381019061064291906140f7565b6110ce565b6040516106549190614001565b60405180910390f35b348015610668575f80fd5b50610671611175565b60405161067e919061425b565b60405180910390f35b348015610692575f80fd5b5061069b611199565b6040516106a89190614001565b60405180910390f35b3480156106bc575f80fd5b506106d760048036038101906106d29190613fbc565b6111ab565b6040516106e49190614001565b60405180910390f35b3480156106f8575f80fd5b506107016111fd565b60405161070e919061425b565b60405180910390f35b348015610722575f80fd5b5061072b611222565b6040516107389190614001565b60405180910390f35b34801561074c575f80fd5b50610755611234565b6040516107629190614144565b60405180910390f35b348015610776575f80fd5b5061077f61123a565b60405161078c9190614001565b60405180910390f35b3480156107a0575f80fd5b506107bb60048036038101906107b69190613fbc565b61124d565b6040516107c89190614144565b60405180910390f35b3480156107dc575f80fd5b506107e5611292565b005b3480156107f2575f80fd5b506107fb611319565b6040516108089190614001565b60405180910390f35b34801561081c575f80fd5b50610837600480360381019061083291906142d2565b6113b6565b005b348015610844575f80fd5b5061084d61148a565b60405161085a919061425b565b60405180910390f35b34801561086e575f80fd5b5061088960048036038101906108849190613fbc565b6114af565b005b348015610896575f80fd5b506108b160048036038101906108ac9190613fbc565b6115a0565b005b3480156108be575f80fd5b506108d960048036038101906108d49190614310565b6116da565b005b3480156108e6575f80fd5b506108ef6117d9565b005b3480156108fc575f80fd5b50610905611993565b005b348015610912575f80fd5b5061091b611a60565b604051610928919061425b565b60405180910390f35b34801561093c575f80fd5b5061095760048036038101906109529190614360565b611a88565b005b348015610964575f80fd5b5061096d611b21565b60405161097a91906140a4565b60405180910390f35b34801561098e575f80fd5b506109a960048036038101906109a491906142d2565b611bb1565b005b3480156109b6575f80fd5b506109bf611cc9565b6040516109cc9190614144565b60405180910390f35b3480156109e0575f80fd5b506109fb60048036038101906109f691906140f7565b611ccf565b604051610a089190614001565b60405180910390f35b348015610a1c575f80fd5b50610a376004803603810190610a3291906140f7565b611db5565b604051610a449190614001565b60405180910390f35b348015610a58575f80fd5b50610a736004803603810190610a6e9190613fbc565b611dd2565b005b348015610a80575f80fd5b50610a9b6004803603810190610a969190613fbc565b611f0c565b604051610aa89190614001565b60405180910390f35b348015610abc575f80fd5b50610ac5611f29565b604051610ad29190614001565b60405180910390f35b348015610ae6575f80fd5b50610b016004803603810190610afc919061438b565b611f3c565b005b348015610b0e575f80fd5b50610b296004803603810190610b2491906142d2565b612122565b005b348015610b36575f80fd5b50610b516004803603810190610b4c9190614310565b612244565b005b348015610b5e575f80fd5b50610b796004803603810190610b7491906141d1565b612343565b005b348015610b86575f80fd5b50610b8f612452565b604051610b9c9190614144565b60405180910390f35b348015610bb0575f80fd5b50610bcb6004803603810190610bc691906141d1565b612458565b604051610bd89190614001565b60405180910390f35b348015610bec575f80fd5b50610bf56125ab565b604051610c029190614144565b60405180910390f35b348015610c16575f80fd5b50610c1f6125b1565b604051610c2c9190614144565b60405180910390f35b348015610c40575f80fd5b50610c5b6004803603810190610c56919061438b565b6125b7565b604051610c689190614144565b60405180910390f35b348015610c7c575f80fd5b50610c85612639565b604051610c929190614144565b60405180910390f35b348015610ca6575f80fd5b50610cc16004803603810190610cbc91906142d2565b61263f565b005b348015610cce575f80fd5b50610cd7612727565b604051610ce49190614144565b60405180910390f35b348015610cf8575f80fd5b50610d136004803603810190610d0e9190613fbc565b61272d565b005b348015610d20575f80fd5b50610d29612823565b604051610d369190614144565b60405180910390f35b348015610d4a575f80fd5b50610d53612829565b604051610d609190614144565b60405180910390f35b348015610d74575f80fd5b50610d7d61282f565b604051610d8a9190614144565b60405180910390f35b601b602052805f5260405f205f915054906101000a900460ff1681565b606060038054610dbf906143f6565b80601f0160208091040260200160405190810160405280929190818152602001828054610deb906143f6565b8015610e365780601f10610e0d57610100808354040283529160200191610e36565b820191905f5260205f20905b815481529060010190602001808311610e1957829003601f168201915b5050505050905090565b5f610e53610e4c612835565b848461283c565b6001905092915050565b6018602052805f5260405f205f915054906101000a900460ff1681565b600d5481565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b5f600254905090565b60115481565b60155481565b610ec1612835565b73ffffffffffffffffffffffffffffffffffffffff16610edf611a60565b73ffffffffffffffffffffffffffffffffffffffff1614610f35576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f2c90614470565b60405180910390fd5b670de0b6b3a76400006103e86005610f4b610ea4565b610f5591906144bb565b610f5f9190614529565b610f699190614529565b811015610fab576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fa2906145c9565b60405180910390fd5b670de0b6b3a764000081610fbf91906144bb565b60088190555050565b5f610fd48484846129ff565b5f60015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f61101b612835565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205490508281101561109a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161109190614657565b60405180910390fd5b6110ae856110a6612835565b85840361283c565b60019150509392505050565b60145481565b61dead81565b5f6012905090565b5f61116b6110da612835565b848460015f6110e7612835565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546111669190614675565b61283c565b6001905092915050565b7f0000000000000000000000002d278be955146f094dd6e4dc5cc5868943d15baf81565b600b5f9054906101000a900460ff1681565b5f60175f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169050919050565b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b601a5f9054906101000a900460ff1681565b60105481565b600b60029054906101000a900460ff1681565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b61129a612835565b73ffffffffffffffffffffffffffffffffffffffff166112b8611a60565b73ffffffffffffffffffffffffffffffffffffffff161461130e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161130590614470565b60405180910390fd5b6113175f61352d565b565b5f611322612835565b73ffffffffffffffffffffffffffffffffffffffff16611340611a60565b73ffffffffffffffffffffffffffffffffffffffff1614611396576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161138d90614470565b60405180910390fd5b5f600b5f6101000a81548160ff0219169083151502179055506001905090565b6113be612835565b73ffffffffffffffffffffffffffffffffffffffff166113dc611a60565b73ffffffffffffffffffffffffffffffffffffffff1614611432576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161142990614470565b60405180910390fd5b8060185f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6114b7612835565b73ffffffffffffffffffffffffffffffffffffffff166114d5611a60565b73ffffffffffffffffffffffffffffffffffffffff161461152b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161152290614470565b60405180910390fd5b5f8173ffffffffffffffffffffffffffffffffffffffff1647604051611550906146d5565b5f6040518083038185875af1925050503d805f811461158a576040519150601f19603f3d011682016040523d82523d5f602084013e61158f565b606091505b505090508061159c575f80fd5b5050565b6115a8612835565b73ffffffffffffffffffffffffffffffffffffffff166115c6611a60565b73ffffffffffffffffffffffffffffffffffffffff161461161c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161161390614470565b60405180910390fd5b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8aa0f85050aca99be43beb823e0457e77966b3baf697a289b03681978f96166860405160405180910390a38060075f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6116e2612835565b73ffffffffffffffffffffffffffffffffffffffff16611700611a60565b73ffffffffffffffffffffffffffffffffffffffff1614611756576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161174d90614470565b60405180910390fd5b82600d8190555081600e8190555080600f81905550600f54600e54600d5461177e9190614675565b6117889190614675565b600c819055506023600c5411156117d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117cb90614733565b60405180910390fd5b505050565b6117e1612835565b73ffffffffffffffffffffffffffffffffffffffff166117ff611a60565b73ffffffffffffffffffffffffffffffffffffffff1614611855576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161184c90614470565b60405180910390fd5b5f3073ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161188f919061425b565b602060405180830381865afa1580156118aa573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906118ce9190614765565b90503073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b815260040161190b929190614790565b6020604051808303815f875af1158015611927573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061194b91906147cb565b503373ffffffffffffffffffffffffffffffffffffffff166108fc4790811502906040515f60405180830381858888f1935050505015801561198f573d5f803e3d5ffd5b5050565b61199b612835565b73ffffffffffffffffffffffffffffffffffffffff166119b9611a60565b73ffffffffffffffffffffffffffffffffffffffff1614611a0f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a0690614470565b60405180910390fd5b6001600b60016101000a81548160ff0219169083151502179055506001600b60026101000a81548160ff0219169083151502179055505f601a5f6101000a81548160ff021916908315150217905550565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611a90612835565b73ffffffffffffffffffffffffffffffffffffffff16611aae611a60565b73ffffffffffffffffffffffffffffffffffffffff1614611b04576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611afb90614470565b60405180910390fd5b80600b60026101000a81548160ff02191690831515021790555050565b606060048054611b30906143f6565b80601f0160208091040260200160405190810160405280929190818152602001828054611b5c906143f6565b8015611ba75780601f10611b7e57610100808354040283529160200191611ba7565b820191905f5260205f20905b815481529060010190602001808311611b8a57829003601f168201915b5050505050905090565b611bb9612835565b73ffffffffffffffffffffffffffffffffffffffff16611bd7611a60565b73ffffffffffffffffffffffffffffffffffffffff1614611c2d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c2490614470565b60405180910390fd5b7f0000000000000000000000002d278be955146f094dd6e4dc5cc5868943d15baf73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611cbb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cb290614866565b60405180910390fd5b611cc582826135f0565b5050565b600f5481565b5f8060015f611cdc612835565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905082811015611d96576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d8d906148f4565b60405180910390fd5b611daa611da1612835565b8585840361283c565b600191505092915050565b5f611dc8611dc1612835565b84846129ff565b6001905092915050565b611dda612835565b73ffffffffffffffffffffffffffffffffffffffff16611df8611a60565b73ffffffffffffffffffffffffffffffffffffffff1614611e4e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e4590614470565b60405180910390fd5b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fc9f2d63eee8632b33d7a7db5252eb29036e81ee4fbe29260febe0c49ffb8a7bb60405160405180910390a38060065f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6019602052805f5260405f205f915054906101000a900460ff1681565b600b60019054906101000a900460ff1681565b611f44612835565b73ffffffffffffffffffffffffffffffffffffffff16611f62611a60565b73ffffffffffffffffffffffffffffffffffffffff1614611fb8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611faf90614470565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612026576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161201d9061495c565b60405180910390fd5b5f8273ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401612060919061425b565b602060405180830381865afa15801561207b573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061209f9190614765565b90508273ffffffffffffffffffffffffffffffffffffffff1663a9059cbb83836040518363ffffffff1660e01b81526004016120dc929190614790565b6020604051808303815f875af11580156120f8573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061211c91906147cb565b50505050565b61212a612835565b73ffffffffffffffffffffffffffffffffffffffff16612148611a60565b73ffffffffffffffffffffffffffffffffffffffff161461219e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161219590614470565b60405180910390fd5b8060175f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7826040516122389190614001565b60405180910390a25050565b61224c612835565b73ffffffffffffffffffffffffffffffffffffffff1661226a611a60565b73ffffffffffffffffffffffffffffffffffffffff16146122c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122b790614470565b60405180910390fd5b8260118190555081601281905550806013819055506013546012546011546122e89190614675565b6122f29190614675565b6010819055506023601054111561233e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612335906149c4565b60405180910390fd5b505050565b61234b612835565b73ffffffffffffffffffffffffffffffffffffffff16612369611a60565b73ffffffffffffffffffffffffffffffffffffffff16146123bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123b690614470565b60405180910390fd5b670de0b6b3a76400006103e8600a6123d5610ea4565b6123df91906144bb565b6123e99190614529565b6123f39190614529565b811015612435576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161242c90614a52565b60405180910390fd5b670de0b6b3a76400008161244991906144bb565b600a8190555050565b60085481565b5f612461612835565b73ffffffffffffffffffffffffffffffffffffffff1661247f611a60565b73ffffffffffffffffffffffffffffffffffffffff16146124d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124cc90614470565b60405180910390fd5b620186a060016124e3610ea4565b6124ed91906144bb565b6124f79190614529565b821015612539576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161253090614ae0565b60405180910390fd5b60646001612545610ea4565b61254f91906144bb565b6125599190614529565b82111561259b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161259290614b6e565b60405180910390fd5b8160098190555060019050919050565b60135481565b600c5481565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b60095481565b612647612835565b73ffffffffffffffffffffffffffffffffffffffff16612665611a60565b73ffffffffffffffffffffffffffffffffffffffff16146126bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126b290614470565b60405180910390fd5b80601b5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055506127198282612122565b61272382826113b6565b5050565b600e5481565b612735612835565b73ffffffffffffffffffffffffffffffffffffffff16612753611a60565b73ffffffffffffffffffffffffffffffffffffffff16146127a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127a090614470565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612817576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161280e90614bfc565b60405180910390fd5b6128208161352d565b50565b60125481565b600a5481565b60165481565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036128aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128a190614c8a565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612918576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161290f90614d18565b60405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516129f29190614144565b60405180910390a3505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612a6d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a6490614da6565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612adb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ad290614e34565b60405180910390fd5b601a5f9054906101000a900460ff1615612b7957601b5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16612b78576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b6f90614ec2565b60405180910390fd5b5b5f8103612b9057612b8b83835f61368e565b613528565b600b5f9054906101000a900460ff161561307457612bac611a60565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015612c1a5750612bea611a60565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612c5257505f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612c8c575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612ca55750600560149054906101000a900460ff16155b1561307357600b60019054906101000a900460ff16612d995760175f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680612d59575060175f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b612d98576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d8f90614f2a565b60405180910390fd5b5b60195f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015612e36575060185f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15612edd57600854811115612e80576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e7790614fb8565b60405180910390fd5b600a54612e8c8361124d565b82612e979190614675565b1115612ed8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ecf90615020565b60405180910390fd5b613072565b60195f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015612f7a575060185f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15612fc957600854811115612fc4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fbb906150ae565b60405180910390fd5b613071565b60185f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1661307057600a546130238361124d565b8261302e9190614675565b111561306f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161306690615020565b60405180910390fd5b5b5b5b5b5b5f61307e3061124d565b90505f60095482101590508080156130a25750600b60029054906101000a900460ff165b80156130bb5750600560149054906101000a900460ff16155b801561310e575060195f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b8015613161575060175f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b80156131b4575060175f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b156131f7576001600560146101000a81548160ff0219169083151502179055506131dc613903565b5f600560146101000a81548160ff0219169083151502179055505b5f600560149054906101000a900460ff1615905060175f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16806132a6575060175f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b156132af575f90505b5f81156135185760195f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16801561330d57505f601054115b156133d75761333a606461332c60105488613c0490919063ffffffff16565b613c1990919063ffffffff16565b90506010546012548261334d91906144bb565b6133579190614529565b60155f8282546133679190614675565b925050819055506010546013548261337f91906144bb565b6133899190614529565b60165f8282546133999190614675565b92505081905550601054601154826133b191906144bb565b6133bb9190614529565b60145f8282546133cb9190614675565b925050819055506134f5565b60195f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16801561342e57505f600c54115b156134f45761345b606461344d600c5488613c0490919063ffffffff16565b613c1990919063ffffffff16565b9050600c54600e548261346e91906144bb565b6134789190614529565b60155f8282546134889190614675565b92505081905550600c54600f54826134a091906144bb565b6134aa9190614529565b60165f8282546134ba9190614675565b92505081905550600c54600d54826134d291906144bb565b6134dc9190614529565b60145f8282546134ec9190614675565b925050819055505b5b5f8111156135095761350887308361368e565b5b808561351591906150cc565b94505b61352387878761368e565b505050505b505050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8060195f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036136fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016136f390614da6565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361376a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161376190614e34565b60405180910390fd5b613775838383613c2e565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050818110156137f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016137ef9061516f565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550815f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8282546138869190614675565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516138ea9190614144565b60405180910390a36138fd848484613c33565b50505050565b5f61390d3061124d565b90505f6016546014546015546139239190614675565b61392d9190614675565b90505f8083148061393d57505f82145b1561394a57505050613c02565b601460095461395991906144bb565b83111561397257601460095461396f91906144bb565b92505b5f6002836015548661398491906144bb565b61398e9190614529565b6139989190614529565b90505f6139ae8286613c3890919063ffffffff16565b90505f4790506139bd82613c4d565b5f6139d18247613c3890919063ffffffff16565b90505f613a1460026015546139e69190614529565b886139f191906150cc565b613a0660145485613c0490919063ffffffff16565b613c1990919063ffffffff16565b90505f613a576002601554613a299190614529565b89613a3491906150cc565b613a4960165486613c0490919063ffffffff16565b613c1990919063ffffffff16565b90505f818385613a6791906150cc565b613a7191906150cc565b90505f6015819055505f6014819055505f60168190555060075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1682604051613acd906146d5565b5f6040518083038185875af1925050503d805f8114613b07576040519150601f19603f3d011682016040523d82523d5f602084013e613b0c565b606091505b5050809850505f87118015613b2057505f81115b15613b6d57613b2f8782613e80565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb5618682601554604051613b649392919061518d565b60405180910390a15b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051613bb2906146d5565b5f6040518083038185875af1925050503d805f8114613bec576040519150601f19603f3d011682016040523d82523d5f602084013e613bf1565b606091505b505080985050505050505050505050505b565b5f8183613c1191906144bb565b905092915050565b5f8183613c269190614529565b905092915050565b505050565b505050565b5f8183613c4591906150cc565b905092915050565b5f600267ffffffffffffffff811115613c6957613c686151c2565b5b604051908082528060200260200182016040528015613c975781602001602082028036833780820191505090505b50905030815f81518110613cae57613cad6151ef565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613d51573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613d759190615230565b81600181518110613d8957613d886151ef565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613dee307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d8461283c565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac947835f8430426040518663ffffffff1660e01b8152600401613e4f95949392919061534b565b5f604051808303815f87803b158015613e66575f80fd5b505af1158015613e78573d5f803e3d5ffd5b505050505050565b613eab307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d8461283c565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663f305d7198230855f80613ef4611a60565b426040518863ffffffff1660e01b8152600401613f16969594939291906153a3565b60606040518083038185885af1158015613f32573d5f803e3d5ffd5b50505050506040513d601f19601f82011682018060405250810190613f579190615402565b5050505050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f613f8b82613f62565b9050919050565b613f9b81613f81565b8114613fa5575f80fd5b50565b5f81359050613fb681613f92565b92915050565b5f60208284031215613fd157613fd0613f5e565b5b5f613fde84828501613fa8565b91505092915050565b5f8115159050919050565b613ffb81613fe7565b82525050565b5f6020820190506140145f830184613ff2565b92915050565b5f81519050919050565b5f82825260208201905092915050565b5f5b83811015614051578082015181840152602081019050614036565b5f8484015250505050565b5f601f19601f8301169050919050565b5f6140768261401a565b6140808185614024565b9350614090818560208601614034565b6140998161405c565b840191505092915050565b5f6020820190508181035f8301526140bc818461406c565b905092915050565b5f819050919050565b6140d6816140c4565b81146140e0575f80fd5b50565b5f813590506140f1816140cd565b92915050565b5f806040838503121561410d5761410c613f5e565b5b5f61411a85828601613fa8565b925050602061412b858286016140e3565b9150509250929050565b61413e816140c4565b82525050565b5f6020820190506141575f830184614135565b92915050565b5f819050919050565b5f61418061417b61417684613f62565b61415d565b613f62565b9050919050565b5f61419182614166565b9050919050565b5f6141a282614187565b9050919050565b6141b281614198565b82525050565b5f6020820190506141cb5f8301846141a9565b92915050565b5f602082840312156141e6576141e5613f5e565b5b5f6141f3848285016140e3565b91505092915050565b5f805f6060848603121561421357614212613f5e565b5b5f61422086828701613fa8565b935050602061423186828701613fa8565b9250506040614242868287016140e3565b9150509250925092565b61425581613f81565b82525050565b5f60208201905061426e5f83018461424c565b92915050565b5f60ff82169050919050565b61428981614274565b82525050565b5f6020820190506142a25f830184614280565b92915050565b6142b181613fe7565b81146142bb575f80fd5b50565b5f813590506142cc816142a8565b92915050565b5f80604083850312156142e8576142e7613f5e565b5b5f6142f585828601613fa8565b9250506020614306858286016142be565b9150509250929050565b5f805f6060848603121561432757614326613f5e565b5b5f614334868287016140e3565b9350506020614345868287016140e3565b9250506040614356868287016140e3565b9150509250925092565b5f6020828403121561437557614374613f5e565b5b5f614382848285016142be565b91505092915050565b5f80604083850312156143a1576143a0613f5e565b5b5f6143ae85828601613fa8565b92505060206143bf85828601613fa8565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061440d57607f821691505b6020821081036144205761441f6143c9565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f61445a602083614024565b915061446582614426565b602082019050919050565b5f6020820190508181035f8301526144878161444e565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f6144c5826140c4565b91506144d0836140c4565b92508282026144de816140c4565b915082820484148315176144f5576144f461448e565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f614533826140c4565b915061453e836140c4565b92508261454e5761454d6144fc565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e74205f8201527f6c6f776572207468616e20302e35250000000000000000000000000000000000602082015250565b5f6145b3602f83614024565b91506145be82614559565b604082019050919050565b5f6020820190508181035f8301526145e0816145a7565b9050919050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320615f8201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b5f614641602883614024565b915061464c826145e7565b604082019050919050565b5f6020820190508181035f83015261466e81614635565b9050919050565b5f61467f826140c4565b915061468a836140c4565b92508282019050808211156146a2576146a161448e565b5b92915050565b5f81905092915050565b50565b5f6146c05f836146a8565b91506146cb826146b2565b5f82019050919050565b5f6146df826146b5565b9150819050919050565b7f4275792066656573206d757374206265203c3d2033352e0000000000000000005f82015250565b5f61471d601783614024565b9150614728826146e9565b602082019050919050565b5f6020820190508181035f83015261474a81614711565b9050919050565b5f8151905061475f816140cd565b92915050565b5f6020828403121561477a57614779613f5e565b5b5f61478784828501614751565b91505092915050565b5f6040820190506147a35f83018561424c565b6147b06020830184614135565b9392505050565b5f815190506147c5816142a8565b92915050565b5f602082840312156147e0576147df613f5e565b5b5f6147ed848285016147b7565b91505092915050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d205f8201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b5f614850603983614024565b915061485b826147f6565b604082019050919050565b5f6020820190508181035f83015261487d81614844565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f775f8201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b5f6148de602583614024565b91506148e982614884565b604082019050919050565b5f6020820190508181035f83015261490b816148d2565b9050919050565b7f5f746f6b656e20616464726573732063616e6e6f7420626520300000000000005f82015250565b5f614946601a83614024565b915061495182614912565b602082019050919050565b5f6020820190508181035f8301526149738161493a565b9050919050565b7f53656c6c2066656573206d757374206265203c3d2033352e00000000000000005f82015250565b5f6149ae601883614024565b91506149b98261497a565b602082019050919050565b5f6020820190508181035f8301526149db816149a2565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e205f8201527f312e302500000000000000000000000000000000000000000000000000000000602082015250565b5f614a3c602483614024565b9150614a47826149e2565b604082019050919050565b5f6020820190508181035f830152614a6981614a30565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e5f8201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b5f614aca603583614024565b9150614ad582614a70565b604082019050919050565b5f6020820190508181035f830152614af781614abe565b9050919050565b7f5377617020616d6f756e742063616e6e6f7420626520686967686572207468615f8201527f6e20312e302520746f74616c20737570706c792e000000000000000000000000602082015250565b5f614b58603483614024565b9150614b6382614afe565b604082019050919050565b5f6020820190508181035f830152614b8581614b4c565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f614be6602683614024565b9150614bf182614b8c565b604082019050919050565b5f6020820190508181035f830152614c1381614bda565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f614c74602483614024565b9150614c7f82614c1a565b604082019050919050565b5f6020820190508181035f830152614ca181614c68565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f614d02602283614024565b9150614d0d82614ca8565b604082019050919050565b5f6020820190508181035f830152614d2f81614cf6565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f614d90602583614024565b9150614d9b82614d36565b604082019050919050565b5f6020820190508181035f830152614dbd81614d84565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f614e1e602383614024565b9150614e2982614dc4565b604082019050919050565b5f6020820190508181035f830152614e4b81614e12565b9050919050565b7f4e6f7420617574686f72697a656420746f207472616e73666572207072652d6c5f8201527f697374696e672e00000000000000000000000000000000000000000000000000602082015250565b5f614eac602783614024565b9150614eb782614e52565b604082019050919050565b5f6020820190508181035f830152614ed981614ea0565b9050919050565b7f54726164696e67206973206e6f74206163746976652e000000000000000000005f82015250565b5f614f14601683614024565b9150614f1f82614ee0565b602082019050919050565b5f6020820190508181035f830152614f4181614f08565b9050919050565b7f427579207472616e7366657220616d6f756e74206578636565647320746865205f8201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b5f614fa2603583614024565b9150614fad82614f48565b604082019050919050565b5f6020820190508181035f830152614fcf81614f96565b9050919050565b7f4d61782077616c6c6574206578636565646564000000000000000000000000005f82015250565b5f61500a601383614024565b915061501582614fd6565b602082019050919050565b5f6020820190508181035f83015261503781614ffe565b9050919050565b7f53656c6c207472616e7366657220616d6f756e742065786365656473207468655f8201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b5f615098603683614024565b91506150a38261503e565b604082019050919050565b5f6020820190508181035f8301526150c58161508c565b9050919050565b5f6150d6826140c4565b91506150e1836140c4565b92508282039050818111156150f9576150f861448e565b5b92915050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320625f8201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b5f615159602683614024565b9150615164826150ff565b604082019050919050565b5f6020820190508181035f8301526151868161514d565b9050919050565b5f6060820190506151a05f830186614135565b6151ad6020830185614135565b6151ba6040830184614135565b949350505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f8151905061522a81613f92565b92915050565b5f6020828403121561524557615244613f5e565b5b5f6152528482850161521c565b91505092915050565b5f819050919050565b5f61527e6152796152748461525b565b61415d565b6140c4565b9050919050565b61528e81615264565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b6152c681613f81565b82525050565b5f6152d783836152bd565b60208301905092915050565b5f602082019050919050565b5f6152f982615294565b615303818561529e565b935061530e836152ae565b805f5b8381101561533e57815161532588826152cc565b9750615330836152e3565b925050600181019050615311565b5085935050505092915050565b5f60a08201905061535e5f830188614135565b61536b6020830187615285565b818103604083015261537d81866152ef565b905061538c606083018561424c565b6153996080830184614135565b9695505050505050565b5f60c0820190506153b65f83018961424c565b6153c36020830188614135565b6153d06040830187615285565b6153dd6060830186615285565b6153ea608083018561424c565b6153f760a0830184614135565b979650505050505050565b5f805f6060848603121561541957615418613f5e565b5b5f61542686828701614751565b935050602061543786828701614751565b925050604061544886828701614751565b915050925092509256fea26469706673582212202ad630763932b7adcb2210c4cad211bb23f6c1bcd2d5829c4e94d70b9b2e630364736f6c63430008140033

Deployed Bytecode Sourcemap

31111:16554:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32560:55;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9070:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11237:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32231:63;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31723:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31191:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10190:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31865:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32014:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36731:275;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;11888:492;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31975:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31294:53;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10032:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12789:215;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31249:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31571:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39546:126;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31422:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32518:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31830:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31650:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10361:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2587:103;;;;;;;;;;;;;:::i;:::-;;36036:121;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37279:167;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31386:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47204:196;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39377:161;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37650:397;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46644:256;;;;;;;;;;;;;:::i;:::-;;35838:146;;;;;;;;;;;;;:::i;:::-;;1936:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37542:100;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;9289:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38660:304;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31796:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13507:413;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10701:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39168:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32452:57;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31611:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46908:288;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38470:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38055:407;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37014:257;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31456:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36227:496;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31940:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31689:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10939:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31498:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47408:254;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31759:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2845:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31902:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31538:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32054:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32560:55;;;;;;;;;;;;;;;;;;;;;;:::o;9070:100::-;9124:13;9157:5;9150:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9070:100;:::o;11237:169::-;11320:4;11337:39;11346:12;:10;:12::i;:::-;11360:7;11369:6;11337:8;:39::i;:::-;11394:4;11387:11;;11237:169;;;;:::o;32231:63::-;;;;;;;;;;;;;;;;;;;;;;:::o;31723:29::-;;;;:::o;31191:51::-;;;:::o;10190:108::-;10251:7;10278:12;;10271:19;;10190:108;:::o;31865:30::-;;;;:::o;32014:33::-;;;;:::o;36731:275::-;2167:12;:10;:12::i;:::-;2156:23;;:7;:5;:7::i;:::-;:23;;;2148:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;36868:4:::1;36860;36855:1;36839:13;:11;:13::i;:::-;:17;;;;:::i;:::-;36838:26;;;;:::i;:::-;36837:35;;;;:::i;:::-;36827:6;:45;;36805:142;;;;;;;;;;;;:::i;:::-;;;;;;;;;36991:6;36981;:17;;;;:::i;:::-;36958:20;:40;;;;36731:275:::0;:::o;11888:492::-;12028:4;12045:36;12055:6;12063:9;12074:6;12045:9;:36::i;:::-;12094:24;12121:11;:19;12133:6;12121:19;;;;;;;;;;;;;;;:33;12141:12;:10;:12::i;:::-;12121:33;;;;;;;;;;;;;;;;12094:60;;12193:6;12173:16;:26;;12165:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;12280:57;12289:6;12297:12;:10;:12::i;:::-;12330:6;12311:16;:25;12280:8;:57::i;:::-;12368:4;12361:11;;;11888:492;;;;;:::o;31975:32::-;;;;:::o;31294:53::-;31340:6;31294:53;:::o;10032:93::-;10090:5;10115:2;10108:9;;10032:93;:::o;12789:215::-;12877:4;12894:80;12903:12;:10;:12::i;:::-;12917:7;12963:10;12926:11;:25;12938:12;:10;:12::i;:::-;12926:25;;;;;;;;;;;;;;;:34;12952:7;12926:34;;;;;;;;;;;;;;;;:47;;;;:::i;:::-;12894:8;:80::i;:::-;12992:4;12985:11;;12789:215;;;;:::o;31249:38::-;;;:::o;31571:33::-;;;;;;;;;;;;;:::o;39546:126::-;39612:4;39636:19;:28;39656:7;39636:28;;;;;;;;;;;;;;;;;;;;;;;;;39629:35;;39546:126;;;:::o;31422:25::-;;;;;;;;;;;;;:::o;32518:35::-;;;;;;;;;;;;;:::o;31830:28::-;;;;:::o;31650:30::-;;;;;;;;;;;;;:::o;10361:127::-;10435:7;10462:9;:18;10472:7;10462:18;;;;;;;;;;;;;;;;10455:25;;10361:127;;;:::o;2587:103::-;2167:12;:10;:12::i;:::-;2156:23;;:7;:5;:7::i;:::-;:23;;;2148:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2652:30:::1;2679:1;2652:18;:30::i;:::-;2587:103::o:0;36036:121::-;36088:4;2167:12;:10;:12::i;:::-;2156:23;;:7;:5;:7::i;:::-;:23;;;2148:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;36122:5:::1;36105:14;;:22;;;;;;;;;;;;;;;;;;36145:4;36138:11;;36036:121:::0;:::o;37279:167::-;2167:12;:10;:12::i;:::-;2156:23;;:7;:5;:7::i;:::-;:23;;;2148:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;37434:4:::1;37392:31;:39;37424:6;37392:39;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;37279:167:::0;;:::o;31386:29::-;;;;;;;;;;;;;:::o;47204:196::-;2167:12;:10;:12::i;:::-;2156:23;;:7;:5;:7::i;:::-;:23;;;2148:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47277:12:::1;47295:6;:11;;47328:21;47295:70;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47276:89;;;47384:7;47376:16;;;::::0;::::1;;47265:135;47204:196:::0;:::o;39377:161::-;2167:12;:10;:12::i;:::-;2156:23;;:7;:5;:7::i;:::-;:23;;;2148:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;39486:10:::1;;;;;;;;;;;39457:40;;39475:9;39457:40;;;;;;;;;;;;39521:9;39508:10;;:22;;;;;;;;;;;;;;;;;;39377:161:::0;:::o;37650:397::-;2167:12;:10;:12::i;:::-;2156:23;;:7;:5;:7::i;:::-;:23;;;2148:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;37817:12:::1;37800:14;:29;;;;37858:13;37840:15;:31;;;;37895:8;37882:10;:21;;;;37964:10;;37946:15;;37929:14;;:32;;;;:::i;:::-;:45;;;;:::i;:::-;37914:12;:60;;;;38009:2;37993:12;;:18;;37985:54;;;;;;;;;;;;:::i;:::-;;;;;;;;;37650:397:::0;;;:::o;46644:256::-;2167:12;:10;:12::i;:::-;2156:23;;:7;:5;:7::i;:::-;:23;;;2148:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46704:15:::1;46737:4;46722:31;;;46762:4;46722:46;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;46704:64;;46794:4;46779:30;;;46810:10;46822:7;46779:51;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;46849:10;46841:28;;:51;46870:21;46841:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;46693:207;46644:256::o:0;35838:146::-;2167:12;:10;:12::i;:::-;2156:23;;:7;:5;:7::i;:::-;:23;;;2148:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;35909:4:::1;35893:13;;:20;;;;;;;;;;;;;;;;;;35938:4;35924:11;;:18;;;;;;;;;;;;;;;;;;35971:5;35953:15;;:23;;;;;;;;;;;;;;;;;;35838:146::o:0;1936:87::-;1982:7;2009:6;;;;;;;;;;;2002:13;;1936:87;:::o;37542:100::-;2167:12;:10;:12::i;:::-;2156:23;;:7;:5;:7::i;:::-;:23;;;2148:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;37627:7:::1;37613:11;;:21;;;;;;;;;;;;;;;;;;37542:100:::0;:::o;9289:104::-;9345:13;9378:7;9371:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9289:104;:::o;38660:304::-;2167:12;:10;:12::i;:::-;2156:23;;:7;:5;:7::i;:::-;:23;;;2148:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38804:13:::1;38796:21;;:4;:21;;::::0;38774:128:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;38915:41;38944:4;38950:5;38915:28;:41::i;:::-;38660:304:::0;;:::o;31796:25::-;;;;:::o;13507:413::-;13600:4;13617:24;13644:11;:25;13656:12;:10;:12::i;:::-;13644:25;;;;;;;;;;;;;;;:34;13670:7;13644:34;;;;;;;;;;;;;;;;13617:61;;13717:15;13697:16;:35;;13689:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;13810:67;13819:12;:10;:12::i;:::-;13833:7;13861:15;13842:16;:34;13810:8;:67::i;:::-;13908:4;13901:11;;;13507:413;;;;:::o;10701:175::-;10787:4;10804:42;10814:12;:10;:12::i;:::-;10828:9;10839:6;10804:9;:42::i;:::-;10864:4;10857:11;;10701:175;;;;:::o;39168:201::-;2167:12;:10;:12::i;:::-;2156:23;;:7;:5;:7::i;:::-;:23;;;2148:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;39301:14:::1;;;;;;;;;;;39260:56;;39282:17;39260:56;;;;;;;;;;;;39344:17;39327:14;;:34;;;;;;;;;;;;;;;;;;39168:201:::0;:::o;32452:57::-;;;;;;;;;;;;;;;;;;;;;;:::o;31611:32::-;;;;;;;;;;;;;:::o;46908:288::-;2167:12;:10;:12::i;:::-;2156:23;;:7;:5;:7::i;:::-;:23;;;2148:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47021:1:::1;47003:20;;:6;:20;;::::0;46995:59:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;47065:24;47099:6;47092:24;;;47125:4;47092:39;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;47065:66;;47149:6;47142:23;;;47166:3;47171:16;47142:46;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;46984:212;46908:288:::0;;:::o;38470:182::-;2167:12;:10;:12::i;:::-;2156:23;;:7;:5;:7::i;:::-;:23;;;2148:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38586:8:::1;38555:19;:28;38575:7;38555:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;38626:7;38610:34;;;38635:8;38610:34;;;;;;:::i;:::-;;;;;;;;38470:182:::0;;:::o;38055:407::-;2167:12;:10;:12::i;:::-;2156:23;;:7;:5;:7::i;:::-;:23;;;2148:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38224:12:::1;38206:15;:30;;;;38266:13;38247:16;:32;;;;38304:8;38290:11;:22;;;;38376:11;;38357:16;;38339:15;;:34;;;;:::i;:::-;:48;;;;:::i;:::-;38323:13;:64;;;;38423:2;38406:13;;:19;;38398:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;38055:407:::0;;;:::o;37014:257::-;2167:12;:10;:12::i;:::-;2156:23;;:7;:5;:7::i;:::-;:23;;;2148:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;37155:4:::1;37147;37141:2;37125:13;:11;:13::i;:::-;:18;;;;:::i;:::-;37124:27;;;;:::i;:::-;37123:36;;;;:::i;:::-;37113:6;:46;;37091:132;;;;;;;;;;;;:::i;:::-;;;;;;;;;37256:6;37246;:17;;;;:::i;:::-;37234:9;:29;;;;37014:257:::0;:::o;31456:35::-;;;;:::o;36227:496::-;36335:4;2167:12;:10;:12::i;:::-;2156:23;;:7;:5;:7::i;:::-;:23;;;2148:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;36414:6:::1;36409:1;36393:13;:11;:13::i;:::-;:17;;;;:::i;:::-;36392:28;;;;:::i;:::-;36379:9;:41;;36357:144;;;;;;;;;;;;:::i;:::-;;;;;;;;;36569:3;36564:1;36548:13;:11;:13::i;:::-;:17;;;;:::i;:::-;36547:25;;;;:::i;:::-;36534:9;:38;;36512:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;36684:9;36663:18;:30;;;;36711:4;36704:11;;36227:496:::0;;;:::o;31940:26::-;;;;:::o;31689:27::-;;;;:::o;10939:151::-;11028:7;11055:11;:18;11067:5;11055:18;;;;;;;;;;;;;;;:27;11074:7;11055:27;;;;;;;;;;;;;;;;11048:34;;10939:151;;;;:::o;31498:33::-;;;;:::o;47408:254::-;2167:12;:10;:12::i;:::-;2156:23;;:7;:5;:7::i;:::-;:23;;;2148:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47538:12:::1;47505:23;:30;47529:5;47505:30;;;;;;;;;;;;;;;;:45;;;;;;;;;;;;;;;;;;47561:36;47577:5;47584:12;47561:15;:36::i;:::-;47608:46;47634:5;47641:12;47608:25;:46::i;:::-;47408:254:::0;;:::o;31759:30::-;;;;:::o;2845:201::-;2167:12;:10;:12::i;:::-;2156:23;;:7;:5;:7::i;:::-;:23;;;2148:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2954:1:::1;2934:22;;:8;:22;;::::0;2926:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;3010:28;3029:8;3010:18;:28::i;:::-;2845:201:::0;:::o;31902:31::-;;;;:::o;31538:24::-;;;;:::o;32054:28::-;;;;:::o;803:98::-;856:7;883:10;876:17;;803:98;:::o;17191:380::-;17344:1;17327:19;;:5;:19;;;17319:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;17425:1;17406:21;;:7;:21;;;17398:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;17509:6;17479:11;:18;17491:5;17479:18;;;;;;;;;;;;;;;:27;17498:7;17479:27;;;;;;;;;;;;;;;:36;;;;17547:7;17531:32;;17540:5;17531:32;;;17556:6;17531:32;;;;;;:::i;:::-;;;;;;;;17191:380;;;:::o;39680:4065::-;39828:1;39812:18;;:4;:18;;;39804:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;39905:1;39891:16;;:2;:16;;;39883:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;39964:15;;;;;;;;;;;39960:129;;;40004:23;:29;40028:4;40004:29;;;;;;;;;;;;;;;;;;;;;;;;;39996:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;39960:129;40115:1;40105:6;:11;40101:93;;40133:28;40149:4;40155:2;40159:1;40133:15;:28::i;:::-;40176:7;;40101:93;40210:14;;;;;;;;;;;40206:1694;;;40271:7;:5;:7::i;:::-;40263:15;;:4;:15;;;;:49;;;;;40305:7;:5;:7::i;:::-;40299:13;;:2;:13;;;;40263:49;:86;;;;;40347:1;40333:16;;:2;:16;;;;40263:86;:128;;;;;40384:6;40370:21;;:2;:21;;;;40263:128;:158;;;;;40413:8;;;;;;;;;;;40412:9;40263:158;40241:1648;;;40461:13;;;;;;;;;;;40456:223;;40533:19;:25;40553:4;40533:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;40562:19;:23;40582:2;40562:23;;;;;;;;;;;;;;;;;;;;;;;;;40533:52;40499:160;;;;;;;;;;;;:::i;:::-;;;;;;;;;40456:223;40753:25;:31;40779:4;40753:31;;;;;;;;;;;;;;;;;;;;;;;;;:92;;;;;40810:31;:35;40842:2;40810:35;;;;;;;;;;;;;;;;;;;;;;;;;40809:36;40753:92;40727:1147;;;40932:20;;40922:6;:30;;40888:169;;;;;;;;;;;;:::i;:::-;;;;;;;;;41140:9;;41123:13;41133:2;41123:9;:13::i;:::-;41114:6;:22;;;;:::i;:::-;:35;;41080:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;40727:1147;;;41318:25;:29;41344:2;41318:29;;;;;;;;;;;;;;;;;;;;;;;;;:92;;;;;41373:31;:37;41405:4;41373:37;;;;;;;;;;;;;;;;;;;;;;;;;41372:38;41318:92;41292:582;;;41497:20;;41487:6;:30;;41453:170;;;;;;;;;;;;:::i;:::-;;;;;;;;;41292:582;;;41654:31;:35;41686:2;41654:35;;;;;;;;;;;;;;;;;;;;;;;;;41649:225;;41774:9;;41757:13;41767:2;41757:9;:13::i;:::-;41748:6;:22;;;;:::i;:::-;:35;;41714:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;41649:225;41292:582;40727:1147;40241:1648;40206:1694;41912:28;41943:24;41961:4;41943:9;:24::i;:::-;41912:55;;41980:12;42019:18;;41995:20;:42;;41980:57;;42068:7;:35;;;;;42092:11;;;;;;;;;;;42068:35;:61;;;;;42121:8;;;;;;;;;;;42120:9;42068:61;:110;;;;;42147:25;:31;42173:4;42147:31;;;;;;;;;;;;;;;;;;;;;;;;;42146:32;42068:110;:153;;;;;42196:19;:25;42216:4;42196:25;;;;;;;;;;;;;;;;;;;;;;;;;42195:26;42068:153;:194;;;;;42239:19;:23;42259:2;42239:23;;;;;;;;;;;;;;;;;;;;;;;;;42238:24;42068:194;42050:326;;;42300:4;42289:8;;:15;;;;;;;;;;;;;;;;;;42321:10;:8;:10::i;:::-;42359:5;42348:8;;:16;;;;;;;;;;;;;;;;;;42050:326;42388:12;42404:8;;;;;;;;;;;42403:9;42388:24;;42514:19;:25;42534:4;42514:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;42543:19;:23;42563:2;42543:23;;;;;;;;;;;;;;;;;;;;;;;;;42514:52;42510:100;;;42593:5;42583:15;;42510:100;42622:12;42727:7;42723:969;;;42779:25;:29;42805:2;42779:29;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;;42828:1;42812:13;;:17;42779:50;42775:768;;;42857:34;42887:3;42857:25;42868:13;;42857:6;:10;;:25;;;;:::i;:::-;:29;;:34;;;;:::i;:::-;42850:41;;42960:13;;42940:16;;42933:4;:23;;;;:::i;:::-;42932:41;;;;:::i;:::-;42910:18;;:63;;;;;;;:::i;:::-;;;;;;;;43032:13;;43017:11;;43010:4;:18;;;;:::i;:::-;43009:36;;;;:::i;:::-;42992:13;;:53;;;;;;;:::i;:::-;;;;;;;;43112:13;;43093:15;;43086:4;:22;;;;:::i;:::-;43085:40;;;;:::i;:::-;43064:17;;:61;;;;;;;:::i;:::-;;;;;;;;42775:768;;;43187:25;:31;43213:4;43187:31;;;;;;;;;;;;;;;;;;;;;;;;;:51;;;;;43237:1;43222:12;;:16;43187:51;43183:360;;;43266:33;43295:3;43266:24;43277:12;;43266:6;:10;;:24;;;;:::i;:::-;:28;;:33;;;;:::i;:::-;43259:40;;43367:12;;43348:15;;43341:4;:22;;;;:::i;:::-;43340:39;;;;:::i;:::-;43318:18;;:61;;;;;;;:::i;:::-;;;;;;;;43437:12;;43423:10;;43416:4;:17;;;;:::i;:::-;43415:34;;;;:::i;:::-;43398:13;;:51;;;;;;;:::i;:::-;;;;;;;;43515:12;;43497:14;;43490:4;:21;;;;:::i;:::-;43489:38;;;;:::i;:::-;43468:17;;:59;;;;;;;:::i;:::-;;;;;;;;43183:360;42775:768;43570:1;43563:4;:8;43559:91;;;43592:42;43608:4;43622;43629;43592:15;:42::i;:::-;43559:91;43676:4;43666:14;;;;;:::i;:::-;;;42723:969;43704:33;43720:4;43726:2;43730:6;43704:15;:33::i;:::-;39793:3952;;;;39680:4065;;;;:::o;3206:191::-;3280:16;3299:6;;;;;;;;;;;3280:25;;3325:8;3316:6;;:17;;;;;;;;;;;;;;;;;;3380:8;3349:40;;3370:8;3349:40;;;;;;;;;;;;3269:128;3206:191;:::o;38972:188::-;39089:5;39055:25;:31;39081:4;39055:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;39146:5;39112:40;;39140:4;39112:40;;;;;;;;;;;;38972:188;;:::o;14410:733::-;14568:1;14550:20;;:6;:20;;;14542:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;14652:1;14631:23;;:9;:23;;;14623:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;14707:47;14728:6;14736:9;14747:6;14707:20;:47::i;:::-;14767:21;14791:9;:17;14801:6;14791:17;;;;;;;;;;;;;;;;14767:41;;14844:6;14827:13;:23;;14819:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;14965:6;14949:13;:22;14929:9;:17;14939:6;14929:17;;;;;;;;;;;;;;;:42;;;;15017:6;14993:9;:20;15003:9;14993:20;;;;;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;15058:9;15041:35;;15050:6;15041:35;;;15069:6;15041:35;;;;;;:::i;:::-;;;;;;;;15089:46;15109:6;15117:9;15128:6;15089:19;:46::i;:::-;14531:612;14410:733;;;:::o;44871:1765::-;44910:23;44936:24;44954:4;44936:9;:24::i;:::-;44910:50;;44971:25;45066:13;;45033:17;;44999:18;;:51;;;;:::i;:::-;:80;;;;:::i;:::-;44971:108;;45090:12;45138:1;45119:15;:20;:46;;;;45164:1;45143:17;:22;45119:46;45115:85;;;45182:7;;;;;45115:85;45255:2;45234:18;;:23;;;;:::i;:::-;45216:15;:41;45212:115;;;45313:2;45292:18;;:23;;;;:::i;:::-;45274:41;;45212:115;45388:23;45501:1;45468:17;45433:18;;45415:15;:36;;;;:::i;:::-;45414:71;;;;:::i;:::-;:88;;;;:::i;:::-;45388:114;;45513:26;45542:36;45562:15;45542;:19;;:36;;;;:::i;:::-;45513:65;;45591:25;45619:21;45591:49;;45653:36;45670:18;45653:16;:36::i;:::-;45702:18;45723:44;45749:17;45723:21;:25;;:44;;;;:::i;:::-;45702:65;;45780:22;45805:83;45885:1;45864:18;;:22;;;;:::i;:::-;45843:17;:44;;;;:::i;:::-;45805:33;45820:17;;45805:10;:14;;:33;;;;:::i;:::-;:37;;:83;;;;:::i;:::-;45780:108;;45901:18;45922:79;45998:1;45977:18;;:22;;;;:::i;:::-;45956:17;:44;;;;:::i;:::-;45922:29;45937:13;;45922:10;:14;;:29;;;;:::i;:::-;:33;;:79;;;;:::i;:::-;45901:100;;46014:23;46070:10;46053:14;46040:10;:27;;;;:::i;:::-;:40;;;;:::i;:::-;46014:66;;46114:1;46093:18;:22;;;;46146:1;46126:17;:21;;;;46174:1;46158:13;:17;;;;46210:10;;;;;;;;;;;46202:24;;46234:10;46202:47;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46188:61;;;;;46284:1;46266:15;:19;:42;;;;;46307:1;46289:15;:19;46266:42;46262:278;;;46325:46;46338:15;46355;46325:12;:46::i;:::-;46391:137;46424:18;46461:15;46495:18;;46391:137;;;;;;;;:::i;:::-;;;;;;;;46262:278;46574:14;;;;;;;;;;;46566:28;;46602:21;46566:62;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46552:76;;;;;44899:1737;;;;;;;;;;44871:1765;:::o;22323:98::-;22381:7;22412:1;22408;:5;;;;:::i;:::-;22401:12;;22323:98;;;;:::o;22722:::-;22780:7;22811:1;22807;:5;;;;:::i;:::-;22800:12;;22722:98;;;;:::o;18171:125::-;;;;:::o;18900:124::-;;;;:::o;21966:98::-;22024:7;22055:1;22051;:5;;;;:::i;:::-;22044:12;;21966:98;;;;:::o;43753:589::-;43879:21;43917:1;43903:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43879:40;;43948:4;43930;43935:1;43930:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;43974:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;43964:4;43969:1;43964:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;44009:62;44026:4;44041:15;44059:11;44009:8;:62::i;:::-;44110:15;:66;;;44191:11;44217:1;44261:4;44288;44308:15;44110:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43808:534;43753:589;:::o;44350:513::-;44498:62;44515:4;44530:15;44548:11;44498:8;:62::i;:::-;44603:15;:31;;;44642:9;44675:4;44695:11;44721:1;44764;44807:7;:5;:7::i;:::-;44829:15;44603:252;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;44350:513;;:::o;88:117:1:-;197:1;194;187:12;334:126;371:7;411:42;404:5;400:54;389:65;;334:126;;;:::o;466:96::-;503:7;532:24;550:5;532:24;:::i;:::-;521:35;;466:96;;;:::o;568:122::-;641:24;659:5;641:24;:::i;:::-;634:5;631:35;621:63;;680:1;677;670:12;621:63;568:122;:::o;696:139::-;742:5;780:6;767:20;758:29;;796:33;823:5;796:33;:::i;:::-;696:139;;;;:::o;841:329::-;900:6;949:2;937:9;928:7;924:23;920:32;917:119;;;955:79;;:::i;:::-;917:119;1075:1;1100:53;1145:7;1136:6;1125:9;1121:22;1100:53;:::i;:::-;1090:63;;1046:117;841:329;;;;:::o;1176:90::-;1210:7;1253:5;1246:13;1239:21;1228:32;;1176:90;;;:::o;1272:109::-;1353:21;1368:5;1353:21;:::i;:::-;1348:3;1341:34;1272:109;;:::o;1387:210::-;1474:4;1512:2;1501:9;1497:18;1489:26;;1525:65;1587:1;1576:9;1572:17;1563:6;1525:65;:::i;:::-;1387:210;;;;:::o;1603:99::-;1655:6;1689:5;1683:12;1673:22;;1603:99;;;:::o;1708:169::-;1792:11;1826:6;1821:3;1814:19;1866:4;1861:3;1857:14;1842:29;;1708:169;;;;:::o;1883:246::-;1964:1;1974:113;1988:6;1985:1;1982:13;1974:113;;;2073:1;2068:3;2064:11;2058:18;2054:1;2049:3;2045:11;2038:39;2010:2;2007:1;2003:10;1998:15;;1974:113;;;2121:1;2112:6;2107:3;2103:16;2096:27;1945:184;1883:246;;;:::o;2135:102::-;2176:6;2227:2;2223:7;2218:2;2211:5;2207:14;2203:28;2193:38;;2135:102;;;:::o;2243:377::-;2331:3;2359:39;2392:5;2359:39;:::i;:::-;2414:71;2478:6;2473:3;2414:71;:::i;:::-;2407:78;;2494:65;2552:6;2547:3;2540:4;2533:5;2529:16;2494:65;:::i;:::-;2584:29;2606:6;2584:29;:::i;:::-;2579:3;2575:39;2568:46;;2335:285;2243:377;;;;:::o;2626:313::-;2739:4;2777:2;2766:9;2762:18;2754:26;;2826:9;2820:4;2816:20;2812:1;2801:9;2797:17;2790:47;2854:78;2927:4;2918:6;2854:78;:::i;:::-;2846:86;;2626:313;;;;:::o;2945:77::-;2982:7;3011:5;3000:16;;2945:77;;;:::o;3028:122::-;3101:24;3119:5;3101:24;:::i;:::-;3094:5;3091:35;3081:63;;3140:1;3137;3130:12;3081:63;3028:122;:::o;3156:139::-;3202:5;3240:6;3227:20;3218:29;;3256:33;3283:5;3256:33;:::i;:::-;3156:139;;;;:::o;3301:474::-;3369:6;3377;3426:2;3414:9;3405:7;3401:23;3397:32;3394:119;;;3432:79;;:::i;:::-;3394:119;3552:1;3577:53;3622:7;3613:6;3602:9;3598:22;3577:53;:::i;:::-;3567:63;;3523:117;3679:2;3705:53;3750:7;3741:6;3730:9;3726:22;3705:53;:::i;:::-;3695:63;;3650:118;3301:474;;;;;:::o;3781:118::-;3868:24;3886:5;3868:24;:::i;:::-;3863:3;3856:37;3781:118;;:::o;3905:222::-;3998:4;4036:2;4025:9;4021:18;4013:26;;4049:71;4117:1;4106:9;4102:17;4093:6;4049:71;:::i;:::-;3905:222;;;;:::o;4133:60::-;4161:3;4182:5;4175:12;;4133:60;;;:::o;4199:142::-;4249:9;4282:53;4300:34;4309:24;4327:5;4309:24;:::i;:::-;4300:34;:::i;:::-;4282:53;:::i;:::-;4269:66;;4199:142;;;:::o;4347:126::-;4397:9;4430:37;4461:5;4430:37;:::i;:::-;4417:50;;4347:126;;;:::o;4479:153::-;4556:9;4589:37;4620:5;4589:37;:::i;:::-;4576:50;;4479:153;;;:::o;4638:185::-;4752:64;4810:5;4752:64;:::i;:::-;4747:3;4740:77;4638:185;;:::o;4829:276::-;4949:4;4987:2;4976:9;4972:18;4964:26;;5000:98;5095:1;5084:9;5080:17;5071:6;5000:98;:::i;:::-;4829:276;;;;:::o;5111:329::-;5170:6;5219:2;5207:9;5198:7;5194:23;5190:32;5187:119;;;5225:79;;:::i;:::-;5187:119;5345:1;5370:53;5415:7;5406:6;5395:9;5391:22;5370:53;:::i;:::-;5360:63;;5316:117;5111:329;;;;:::o;5446:619::-;5523:6;5531;5539;5588:2;5576:9;5567:7;5563:23;5559:32;5556:119;;;5594:79;;:::i;:::-;5556:119;5714:1;5739:53;5784:7;5775:6;5764:9;5760:22;5739:53;:::i;:::-;5729:63;;5685:117;5841:2;5867:53;5912:7;5903:6;5892:9;5888:22;5867:53;:::i;:::-;5857:63;;5812:118;5969:2;5995:53;6040:7;6031:6;6020:9;6016:22;5995:53;:::i;:::-;5985:63;;5940:118;5446:619;;;;;:::o;6071:118::-;6158:24;6176:5;6158:24;:::i;:::-;6153:3;6146:37;6071:118;;:::o;6195:222::-;6288:4;6326:2;6315:9;6311:18;6303:26;;6339:71;6407:1;6396:9;6392:17;6383:6;6339:71;:::i;:::-;6195:222;;;;:::o;6423:86::-;6458:7;6498:4;6491:5;6487:16;6476:27;;6423:86;;;:::o;6515:112::-;6598:22;6614:5;6598:22;:::i;:::-;6593:3;6586:35;6515:112;;:::o;6633:214::-;6722:4;6760:2;6749:9;6745:18;6737:26;;6773:67;6837:1;6826:9;6822:17;6813:6;6773:67;:::i;:::-;6633:214;;;;:::o;6853:116::-;6923:21;6938:5;6923:21;:::i;:::-;6916:5;6913:32;6903:60;;6959:1;6956;6949:12;6903:60;6853:116;:::o;6975:133::-;7018:5;7056:6;7043:20;7034:29;;7072:30;7096:5;7072:30;:::i;:::-;6975:133;;;;:::o;7114:468::-;7179:6;7187;7236:2;7224:9;7215:7;7211:23;7207:32;7204:119;;;7242:79;;:::i;:::-;7204:119;7362:1;7387:53;7432:7;7423:6;7412:9;7408:22;7387:53;:::i;:::-;7377:63;;7333:117;7489:2;7515:50;7557:7;7548:6;7537:9;7533:22;7515:50;:::i;:::-;7505:60;;7460:115;7114:468;;;;;:::o;7588:619::-;7665:6;7673;7681;7730:2;7718:9;7709:7;7705:23;7701:32;7698:119;;;7736:79;;:::i;:::-;7698:119;7856:1;7881:53;7926:7;7917:6;7906:9;7902:22;7881:53;:::i;:::-;7871:63;;7827:117;7983:2;8009:53;8054:7;8045:6;8034:9;8030:22;8009:53;:::i;:::-;7999:63;;7954:118;8111:2;8137:53;8182:7;8173:6;8162:9;8158:22;8137:53;:::i;:::-;8127:63;;8082:118;7588:619;;;;;:::o;8213:323::-;8269:6;8318:2;8306:9;8297:7;8293:23;8289:32;8286:119;;;8324:79;;:::i;:::-;8286:119;8444:1;8469:50;8511:7;8502:6;8491:9;8487:22;8469:50;:::i;:::-;8459:60;;8415:114;8213:323;;;;:::o;8542:474::-;8610:6;8618;8667:2;8655:9;8646:7;8642:23;8638:32;8635:119;;;8673:79;;:::i;:::-;8635:119;8793:1;8818:53;8863:7;8854:6;8843:9;8839:22;8818:53;:::i;:::-;8808:63;;8764:117;8920:2;8946:53;8991:7;8982:6;8971:9;8967:22;8946:53;:::i;:::-;8936:63;;8891:118;8542:474;;;;;:::o;9022:180::-;9070:77;9067:1;9060:88;9167:4;9164:1;9157:15;9191:4;9188:1;9181:15;9208:320;9252:6;9289:1;9283:4;9279:12;9269:22;;9336:1;9330:4;9326:12;9357:18;9347:81;;9413:4;9405:6;9401:17;9391:27;;9347:81;9475:2;9467:6;9464:14;9444:18;9441:38;9438:84;;9494:18;;:::i;:::-;9438:84;9259:269;9208:320;;;:::o;9534:182::-;9674:34;9670:1;9662:6;9658:14;9651:58;9534:182;:::o;9722:366::-;9864:3;9885:67;9949:2;9944:3;9885:67;:::i;:::-;9878:74;;9961:93;10050:3;9961:93;:::i;:::-;10079:2;10074:3;10070:12;10063:19;;9722:366;;;:::o;10094:419::-;10260:4;10298:2;10287:9;10283:18;10275:26;;10347:9;10341:4;10337:20;10333:1;10322:9;10318:17;10311:47;10375:131;10501:4;10375:131;:::i;:::-;10367:139;;10094:419;;;:::o;10519:180::-;10567:77;10564:1;10557:88;10664:4;10661:1;10654:15;10688:4;10685:1;10678:15;10705:410;10745:7;10768:20;10786:1;10768:20;:::i;:::-;10763:25;;10802:20;10820:1;10802:20;:::i;:::-;10797:25;;10857:1;10854;10850:9;10879:30;10897:11;10879:30;:::i;:::-;10868:41;;11058:1;11049:7;11045:15;11042:1;11039:22;11019:1;11012:9;10992:83;10969:139;;11088:18;;:::i;:::-;10969:139;10753:362;10705:410;;;;:::o;11121:180::-;11169:77;11166:1;11159:88;11266:4;11263:1;11256:15;11290:4;11287:1;11280:15;11307:185;11347:1;11364:20;11382:1;11364:20;:::i;:::-;11359:25;;11398:20;11416:1;11398:20;:::i;:::-;11393:25;;11437:1;11427:35;;11442:18;;:::i;:::-;11427:35;11484:1;11481;11477:9;11472:14;;11307:185;;;;:::o;11498:234::-;11638:34;11634:1;11626:6;11622:14;11615:58;11707:17;11702:2;11694:6;11690:15;11683:42;11498:234;:::o;11738:366::-;11880:3;11901:67;11965:2;11960:3;11901:67;:::i;:::-;11894:74;;11977:93;12066:3;11977:93;:::i;:::-;12095:2;12090:3;12086:12;12079:19;;11738:366;;;:::o;12110:419::-;12276:4;12314:2;12303:9;12299:18;12291:26;;12363:9;12357:4;12353:20;12349:1;12338:9;12334:17;12327:47;12391:131;12517:4;12391:131;:::i;:::-;12383:139;;12110:419;;;:::o;12535:227::-;12675:34;12671:1;12663:6;12659:14;12652:58;12744:10;12739:2;12731:6;12727:15;12720:35;12535:227;:::o;12768:366::-;12910:3;12931:67;12995:2;12990:3;12931:67;:::i;:::-;12924:74;;13007:93;13096:3;13007:93;:::i;:::-;13125:2;13120:3;13116:12;13109:19;;12768:366;;;:::o;13140:419::-;13306:4;13344:2;13333:9;13329:18;13321:26;;13393:9;13387:4;13383:20;13379:1;13368:9;13364:17;13357:47;13421:131;13547:4;13421:131;:::i;:::-;13413:139;;13140:419;;;:::o;13565:191::-;13605:3;13624:20;13642:1;13624:20;:::i;:::-;13619:25;;13658:20;13676:1;13658:20;:::i;:::-;13653:25;;13701:1;13698;13694:9;13687:16;;13722:3;13719:1;13716:10;13713:36;;;13729:18;;:::i;:::-;13713:36;13565:191;;;;:::o;13762:147::-;13863:11;13900:3;13885:18;;13762:147;;;;:::o;13915:114::-;;:::o;14035:398::-;14194:3;14215:83;14296:1;14291:3;14215:83;:::i;:::-;14208:90;;14307:93;14396:3;14307:93;:::i;:::-;14425:1;14420:3;14416:11;14409:18;;14035:398;;;:::o;14439:379::-;14623:3;14645:147;14788:3;14645:147;:::i;:::-;14638:154;;14809:3;14802:10;;14439:379;;;:::o;14824:173::-;14964:25;14960:1;14952:6;14948:14;14941:49;14824:173;:::o;15003:366::-;15145:3;15166:67;15230:2;15225:3;15166:67;:::i;:::-;15159:74;;15242:93;15331:3;15242:93;:::i;:::-;15360:2;15355:3;15351:12;15344:19;;15003:366;;;:::o;15375:419::-;15541:4;15579:2;15568:9;15564:18;15556:26;;15628:9;15622:4;15618:20;15614:1;15603:9;15599:17;15592:47;15656:131;15782:4;15656:131;:::i;:::-;15648:139;;15375:419;;;:::o;15800:143::-;15857:5;15888:6;15882:13;15873:22;;15904:33;15931:5;15904:33;:::i;:::-;15800:143;;;;:::o;15949:351::-;16019:6;16068:2;16056:9;16047:7;16043:23;16039:32;16036:119;;;16074:79;;:::i;:::-;16036:119;16194:1;16219:64;16275:7;16266:6;16255:9;16251:22;16219:64;:::i;:::-;16209:74;;16165:128;15949:351;;;;:::o;16306:332::-;16427:4;16465:2;16454:9;16450:18;16442:26;;16478:71;16546:1;16535:9;16531:17;16522:6;16478:71;:::i;:::-;16559:72;16627:2;16616:9;16612:18;16603:6;16559:72;:::i;:::-;16306:332;;;;;:::o;16644:137::-;16698:5;16729:6;16723:13;16714:22;;16745:30;16769:5;16745:30;:::i;:::-;16644:137;;;;:::o;16787:345::-;16854:6;16903:2;16891:9;16882:7;16878:23;16874:32;16871:119;;;16909:79;;:::i;:::-;16871:119;17029:1;17054:61;17107:7;17098:6;17087:9;17083:22;17054:61;:::i;:::-;17044:71;;17000:125;16787:345;;;;:::o;17138:244::-;17278:34;17274:1;17266:6;17262:14;17255:58;17347:27;17342:2;17334:6;17330:15;17323:52;17138:244;:::o;17388:366::-;17530:3;17551:67;17615:2;17610:3;17551:67;:::i;:::-;17544:74;;17627:93;17716:3;17627:93;:::i;:::-;17745:2;17740:3;17736:12;17729:19;;17388:366;;;:::o;17760:419::-;17926:4;17964:2;17953:9;17949:18;17941:26;;18013:9;18007:4;18003:20;17999:1;17988:9;17984:17;17977:47;18041:131;18167:4;18041:131;:::i;:::-;18033:139;;17760:419;;;:::o;18185:224::-;18325:34;18321:1;18313:6;18309:14;18302:58;18394:7;18389:2;18381:6;18377:15;18370:32;18185:224;:::o;18415:366::-;18557:3;18578:67;18642:2;18637:3;18578:67;:::i;:::-;18571:74;;18654:93;18743:3;18654:93;:::i;:::-;18772:2;18767:3;18763:12;18756:19;;18415:366;;;:::o;18787:419::-;18953:4;18991:2;18980:9;18976:18;18968:26;;19040:9;19034:4;19030:20;19026:1;19015:9;19011:17;19004:47;19068:131;19194:4;19068:131;:::i;:::-;19060:139;;18787:419;;;:::o;19212:176::-;19352:28;19348:1;19340:6;19336:14;19329:52;19212:176;:::o;19394:366::-;19536:3;19557:67;19621:2;19616:3;19557:67;:::i;:::-;19550:74;;19633:93;19722:3;19633:93;:::i;:::-;19751:2;19746:3;19742:12;19735:19;;19394:366;;;:::o;19766:419::-;19932:4;19970:2;19959:9;19955:18;19947:26;;20019:9;20013:4;20009:20;20005:1;19994:9;19990:17;19983:47;20047:131;20173:4;20047:131;:::i;:::-;20039:139;;19766:419;;;:::o;20191:174::-;20331:26;20327:1;20319:6;20315:14;20308:50;20191:174;:::o;20371:366::-;20513:3;20534:67;20598:2;20593:3;20534:67;:::i;:::-;20527:74;;20610:93;20699:3;20610:93;:::i;:::-;20728:2;20723:3;20719:12;20712:19;;20371:366;;;:::o;20743:419::-;20909:4;20947:2;20936:9;20932:18;20924:26;;20996:9;20990:4;20986:20;20982:1;20971:9;20967:17;20960:47;21024:131;21150:4;21024:131;:::i;:::-;21016:139;;20743:419;;;:::o;21168:223::-;21308:34;21304:1;21296:6;21292:14;21285:58;21377:6;21372:2;21364:6;21360:15;21353:31;21168:223;:::o;21397:366::-;21539:3;21560:67;21624:2;21619:3;21560:67;:::i;:::-;21553:74;;21636:93;21725:3;21636:93;:::i;:::-;21754:2;21749:3;21745:12;21738:19;;21397:366;;;:::o;21769:419::-;21935:4;21973:2;21962:9;21958:18;21950:26;;22022:9;22016:4;22012:20;22008:1;21997:9;21993:17;21986:47;22050:131;22176:4;22050:131;:::i;:::-;22042:139;;21769:419;;;:::o;22194:240::-;22334:34;22330:1;22322:6;22318:14;22311:58;22403:23;22398:2;22390:6;22386:15;22379:48;22194:240;:::o;22440:366::-;22582:3;22603:67;22667:2;22662:3;22603:67;:::i;:::-;22596:74;;22679:93;22768:3;22679:93;:::i;:::-;22797:2;22792:3;22788:12;22781:19;;22440:366;;;:::o;22812:419::-;22978:4;23016:2;23005:9;23001:18;22993:26;;23065:9;23059:4;23055:20;23051:1;23040:9;23036:17;23029:47;23093:131;23219:4;23093:131;:::i;:::-;23085:139;;22812:419;;;:::o;23237:239::-;23377:34;23373:1;23365:6;23361:14;23354:58;23446:22;23441:2;23433:6;23429:15;23422:47;23237:239;:::o;23482:366::-;23624:3;23645:67;23709:2;23704:3;23645:67;:::i;:::-;23638:74;;23721:93;23810:3;23721:93;:::i;:::-;23839:2;23834:3;23830:12;23823:19;;23482:366;;;:::o;23854:419::-;24020:4;24058:2;24047:9;24043:18;24035:26;;24107:9;24101:4;24097:20;24093:1;24082:9;24078:17;24071:47;24135:131;24261:4;24135:131;:::i;:::-;24127:139;;23854:419;;;:::o;24279:225::-;24419:34;24415:1;24407:6;24403:14;24396:58;24488:8;24483:2;24475:6;24471:15;24464:33;24279:225;:::o;24510:366::-;24652:3;24673:67;24737:2;24732:3;24673:67;:::i;:::-;24666:74;;24749:93;24838:3;24749:93;:::i;:::-;24867:2;24862:3;24858:12;24851:19;;24510:366;;;:::o;24882:419::-;25048:4;25086:2;25075:9;25071:18;25063:26;;25135:9;25129:4;25125:20;25121:1;25110:9;25106:17;25099:47;25163:131;25289:4;25163:131;:::i;:::-;25155:139;;24882:419;;;:::o;25307:223::-;25447:34;25443:1;25435:6;25431:14;25424:58;25516:6;25511:2;25503:6;25499:15;25492:31;25307:223;:::o;25536:366::-;25678:3;25699:67;25763:2;25758:3;25699:67;:::i;:::-;25692:74;;25775:93;25864:3;25775:93;:::i;:::-;25893:2;25888:3;25884:12;25877:19;;25536:366;;;:::o;25908:419::-;26074:4;26112:2;26101:9;26097:18;26089:26;;26161:9;26155:4;26151:20;26147:1;26136:9;26132:17;26125:47;26189:131;26315:4;26189:131;:::i;:::-;26181:139;;25908:419;;;:::o;26333:221::-;26473:34;26469:1;26461:6;26457:14;26450:58;26542:4;26537:2;26529:6;26525:15;26518:29;26333:221;:::o;26560:366::-;26702:3;26723:67;26787:2;26782:3;26723:67;:::i;:::-;26716:74;;26799:93;26888:3;26799:93;:::i;:::-;26917:2;26912:3;26908:12;26901:19;;26560:366;;;:::o;26932:419::-;27098:4;27136:2;27125:9;27121:18;27113:26;;27185:9;27179:4;27175:20;27171:1;27160:9;27156:17;27149:47;27213:131;27339:4;27213:131;:::i;:::-;27205:139;;26932:419;;;:::o;27357:224::-;27497:34;27493:1;27485:6;27481:14;27474:58;27566:7;27561:2;27553:6;27549:15;27542:32;27357:224;:::o;27587:366::-;27729:3;27750:67;27814:2;27809:3;27750:67;:::i;:::-;27743:74;;27826:93;27915:3;27826:93;:::i;:::-;27944:2;27939:3;27935:12;27928:19;;27587:366;;;:::o;27959:419::-;28125:4;28163:2;28152:9;28148:18;28140:26;;28212:9;28206:4;28202:20;28198:1;28187:9;28183:17;28176:47;28240:131;28366:4;28240:131;:::i;:::-;28232:139;;27959:419;;;:::o;28384:222::-;28524:34;28520:1;28512:6;28508:14;28501:58;28593:5;28588:2;28580:6;28576:15;28569:30;28384:222;:::o;28612:366::-;28754:3;28775:67;28839:2;28834:3;28775:67;:::i;:::-;28768:74;;28851:93;28940:3;28851:93;:::i;:::-;28969:2;28964:3;28960:12;28953:19;;28612:366;;;:::o;28984:419::-;29150:4;29188:2;29177:9;29173:18;29165:26;;29237:9;29231:4;29227:20;29223:1;29212:9;29208:17;29201:47;29265:131;29391:4;29265:131;:::i;:::-;29257:139;;28984:419;;;:::o;29409:226::-;29549:34;29545:1;29537:6;29533:14;29526:58;29618:9;29613:2;29605:6;29601:15;29594:34;29409:226;:::o;29641:366::-;29783:3;29804:67;29868:2;29863:3;29804:67;:::i;:::-;29797:74;;29880:93;29969:3;29880:93;:::i;:::-;29998:2;29993:3;29989:12;29982:19;;29641:366;;;:::o;30013:419::-;30179:4;30217:2;30206:9;30202:18;30194:26;;30266:9;30260:4;30256:20;30252:1;30241:9;30237:17;30230:47;30294:131;30420:4;30294:131;:::i;:::-;30286:139;;30013:419;;;:::o;30438:172::-;30578:24;30574:1;30566:6;30562:14;30555:48;30438:172;:::o;30616:366::-;30758:3;30779:67;30843:2;30838:3;30779:67;:::i;:::-;30772:74;;30855:93;30944:3;30855:93;:::i;:::-;30973:2;30968:3;30964:12;30957:19;;30616:366;;;:::o;30988:419::-;31154:4;31192:2;31181:9;31177:18;31169:26;;31241:9;31235:4;31231:20;31227:1;31216:9;31212:17;31205:47;31269:131;31395:4;31269:131;:::i;:::-;31261:139;;30988:419;;;:::o;31413:240::-;31553:34;31549:1;31541:6;31537:14;31530:58;31622:23;31617:2;31609:6;31605:15;31598:48;31413:240;:::o;31659:366::-;31801:3;31822:67;31886:2;31881:3;31822:67;:::i;:::-;31815:74;;31898:93;31987:3;31898:93;:::i;:::-;32016:2;32011:3;32007:12;32000:19;;31659:366;;;:::o;32031:419::-;32197:4;32235:2;32224:9;32220:18;32212:26;;32284:9;32278:4;32274:20;32270:1;32259:9;32255:17;32248:47;32312:131;32438:4;32312:131;:::i;:::-;32304:139;;32031:419;;;:::o;32456:169::-;32596:21;32592:1;32584:6;32580:14;32573:45;32456:169;:::o;32631:366::-;32773:3;32794:67;32858:2;32853:3;32794:67;:::i;:::-;32787:74;;32870:93;32959:3;32870:93;:::i;:::-;32988:2;32983:3;32979:12;32972:19;;32631:366;;;:::o;33003:419::-;33169:4;33207:2;33196:9;33192:18;33184:26;;33256:9;33250:4;33246:20;33242:1;33231:9;33227:17;33220:47;33284:131;33410:4;33284:131;:::i;:::-;33276:139;;33003:419;;;:::o;33428:241::-;33568:34;33564:1;33556:6;33552:14;33545:58;33637:24;33632:2;33624:6;33620:15;33613:49;33428:241;:::o;33675:366::-;33817:3;33838:67;33902:2;33897:3;33838:67;:::i;:::-;33831:74;;33914:93;34003:3;33914:93;:::i;:::-;34032:2;34027:3;34023:12;34016:19;;33675:366;;;:::o;34047:419::-;34213:4;34251:2;34240:9;34236:18;34228:26;;34300:9;34294:4;34290:20;34286:1;34275:9;34271:17;34264:47;34328:131;34454:4;34328:131;:::i;:::-;34320:139;;34047:419;;;:::o;34472:194::-;34512:4;34532:20;34550:1;34532:20;:::i;:::-;34527:25;;34566:20;34584:1;34566:20;:::i;:::-;34561:25;;34610:1;34607;34603:9;34595:17;;34634:1;34628:4;34625:11;34622:37;;;34639:18;;:::i;:::-;34622:37;34472:194;;;;:::o;34672:225::-;34812:34;34808:1;34800:6;34796:14;34789:58;34881:8;34876:2;34868:6;34864:15;34857:33;34672:225;:::o;34903:366::-;35045:3;35066:67;35130:2;35125:3;35066:67;:::i;:::-;35059:74;;35142:93;35231:3;35142:93;:::i;:::-;35260:2;35255:3;35251:12;35244:19;;34903:366;;;:::o;35275:419::-;35441:4;35479:2;35468:9;35464:18;35456:26;;35528:9;35522:4;35518:20;35514:1;35503:9;35499:17;35492:47;35556:131;35682:4;35556:131;:::i;:::-;35548:139;;35275:419;;;:::o;35700:442::-;35849:4;35887:2;35876:9;35872:18;35864:26;;35900:71;35968:1;35957:9;35953:17;35944:6;35900:71;:::i;:::-;35981:72;36049:2;36038:9;36034:18;36025:6;35981:72;:::i;:::-;36063;36131:2;36120:9;36116:18;36107:6;36063:72;:::i;:::-;35700:442;;;;;;:::o;36148:180::-;36196:77;36193:1;36186:88;36293:4;36290:1;36283:15;36317:4;36314:1;36307:15;36334:180;36382:77;36379:1;36372:88;36479:4;36476:1;36469:15;36503:4;36500:1;36493:15;36520:143;36577:5;36608:6;36602:13;36593:22;;36624:33;36651:5;36624:33;:::i;:::-;36520:143;;;;:::o;36669:351::-;36739:6;36788:2;36776:9;36767:7;36763:23;36759:32;36756:119;;;36794:79;;:::i;:::-;36756:119;36914:1;36939:64;36995:7;36986:6;36975:9;36971:22;36939:64;:::i;:::-;36929:74;;36885:128;36669:351;;;;:::o;37026:85::-;37071:7;37100:5;37089:16;;37026:85;;;:::o;37117:158::-;37175:9;37208:61;37226:42;37235:32;37261:5;37235:32;:::i;:::-;37226:42;:::i;:::-;37208:61;:::i;:::-;37195:74;;37117:158;;;:::o;37281:147::-;37376:45;37415:5;37376:45;:::i;:::-;37371:3;37364:58;37281:147;;:::o;37434:114::-;37501:6;37535:5;37529:12;37519:22;;37434:114;;;:::o;37554:184::-;37653:11;37687:6;37682:3;37675:19;37727:4;37722:3;37718:14;37703:29;;37554:184;;;;:::o;37744:132::-;37811:4;37834:3;37826:11;;37864:4;37859:3;37855:14;37847:22;;37744:132;;;:::o;37882:108::-;37959:24;37977:5;37959:24;:::i;:::-;37954:3;37947:37;37882:108;;:::o;37996:179::-;38065:10;38086:46;38128:3;38120:6;38086:46;:::i;:::-;38164:4;38159:3;38155:14;38141:28;;37996:179;;;;:::o;38181:113::-;38251:4;38283;38278:3;38274:14;38266:22;;38181:113;;;:::o;38330:732::-;38449:3;38478:54;38526:5;38478:54;:::i;:::-;38548:86;38627:6;38622:3;38548:86;:::i;:::-;38541:93;;38658:56;38708:5;38658:56;:::i;:::-;38737:7;38768:1;38753:284;38778:6;38775:1;38772:13;38753:284;;;38854:6;38848:13;38881:63;38940:3;38925:13;38881:63;:::i;:::-;38874:70;;38967:60;39020:6;38967:60;:::i;:::-;38957:70;;38813:224;38800:1;38797;38793:9;38788:14;;38753:284;;;38757:14;39053:3;39046:10;;38454:608;;;38330:732;;;;:::o;39068:831::-;39331:4;39369:3;39358:9;39354:19;39346:27;;39383:71;39451:1;39440:9;39436:17;39427:6;39383:71;:::i;:::-;39464:80;39540:2;39529:9;39525:18;39516:6;39464:80;:::i;:::-;39591:9;39585:4;39581:20;39576:2;39565:9;39561:18;39554:48;39619:108;39722:4;39713:6;39619:108;:::i;:::-;39611:116;;39737:72;39805:2;39794:9;39790:18;39781:6;39737:72;:::i;:::-;39819:73;39887:3;39876:9;39872:19;39863:6;39819:73;:::i;:::-;39068:831;;;;;;;;:::o;39905:807::-;40154:4;40192:3;40181:9;40177:19;40169:27;;40206:71;40274:1;40263:9;40259:17;40250:6;40206:71;:::i;:::-;40287:72;40355:2;40344:9;40340:18;40331:6;40287:72;:::i;:::-;40369:80;40445:2;40434:9;40430:18;40421:6;40369:80;:::i;:::-;40459;40535:2;40524:9;40520:18;40511:6;40459:80;:::i;:::-;40549:73;40617:3;40606:9;40602:19;40593:6;40549:73;:::i;:::-;40632;40700:3;40689:9;40685:19;40676:6;40632:73;:::i;:::-;39905:807;;;;;;;;;:::o;40718:663::-;40806:6;40814;40822;40871:2;40859:9;40850:7;40846:23;40842:32;40839:119;;;40877:79;;:::i;:::-;40839:119;40997:1;41022:64;41078:7;41069:6;41058:9;41054:22;41022:64;:::i;:::-;41012:74;;40968:128;41135:2;41161:64;41217:7;41208:6;41197:9;41193:22;41161:64;:::i;:::-;41151:74;;41106:129;41274:2;41300:64;41356:7;41347:6;41336:9;41332:22;41300:64;:::i;:::-;41290:74;;41245:129;40718:663;;;;;:::o

Swarm Source

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