ETH Price: $2,671.31 (-0.28%)

Token

Marvin The Martian (MARVIN)
 

Overview

Max Total Supply

100,000,000 MARVIN

Holders

30

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
1,939,998.060000000048920562 MARVIN

Value
$0.00
0xa77fcddd8b489bd7898aebc95dd52f8914add732
Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information
# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
MarvinTheMartian

Compiler Version
v0.8.10+commit.fc410830

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

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

/**
 *Submitted for verification at Etherscan.io on 2023-06-02
*/

/**

*/
pragma solidity =0.8.10 >=0.8.10 >=0.8.0 <0.9.0;
pragma experimental ABIEncoderV2;

/* pragma solidity ^0.8.0; */

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

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

////// lib/openzeppelin-contracts/contracts/access/Ownable.sol
// OpenZeppelin Contracts v4.4.0 (access/Ownable.sol)

/* pragma solidity ^0.8.0; */

/* import "../utils/Context.sol"; */

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

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

/* pragma solidity ^0.8.0; */

/* import "./IERC20.sol"; */
/* import "./extensions/IERC20Metadata.sol"; */
/* import "../../utils/Context.sol"; */

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

////// lib/openzeppelin-contracts/contracts/utils/math/SafeMath.sol
// OpenZeppelin Contracts v4.4.0 (utils/math/SafeMath.sol)

/* pragma solidity ^0.8.0; */

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

/**
 * @dev Wrappers over Solidity's arithmetic operations.
 *
 * NOTE: `SafeMath` is 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;
        }
    }
}

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

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;
}

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

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;
}

/* pragma solidity >=0.8.10; */

/* import {IUniswapV2Router02} from "./IUniswapV2Router02.sol"; */
/* import {IUniswapV2Factory} from "./IUniswapV2Factory.sol"; */
/* import {IUniswapV2Pair} from "./IUniswapV2Pair.sol"; */
/* import {IERC20} from "lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol"; */
/* import {ERC20} from "lib/openzeppelin-contracts/contracts/token/ERC20/ERC20.sol"; */
/* import {Ownable} from "lib/openzeppelin-contracts/contracts/access/Ownable.sol"; */
/* import {SafeMath} from "lib/openzeppelin-contracts/contracts/utils/math/SafeMath.sol"; */

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

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

    bool private swapping;

    address public marketingWallet;
    address public buybackWallet;
    address public rewardContract;

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

    uint256 public percentForLPBurn = 25; // 25 = .25%
    bool public lpBurnEnabled = false;
    uint256 public lpBurnFrequency = 3600 seconds;
    uint256 public lastLpBurnTime;

    uint256 public manualBurnFrequency = 30 minutes;
    uint256 public lastManualLpBurnTime;

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

    // Anti-bot and anti-whale mappings and variables
    mapping(address => uint256) private _holderLastTransferTimestamp; // to hold last Transfers temporarily during launch
    bool public transferDelayEnabled = false;

    uint256 public buyTotalFees;
    uint256 public buyMarketingFee;
    uint256 public buyRewardFee;
    uint256 public buyBackFee;

    uint256 public sellTotalFees;
    uint256 public sellMarketingFee;
    uint256 public sellRewardFee;
    uint256 public sellbBackFee;

    uint256 public tokensForMarketing;
    uint256 public tokensForbuyBack;
    uint256 public tokensForReward;

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

    // exlcude 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;

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

    event ExcludeFromFees(address indexed account, bool isExcluded);

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

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

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

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

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

    event AutoNukeLP();

    event ManualNukeLP();

    constructor() ERC20("Marvin The Martian", "MARVIN") {
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(
            0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D
        );

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

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

        uint256 _buyMarketingFee = 3;
        uint256 _buyRewardFee = 0;
        uint256 _buyBackFee = 0;

        uint256 _sellMarketingFee = 40;
        uint256 _sellRewardFee = 0;
        uint256 _sellbBackFee = 0;

        uint256 totalSupply = 100_000_000 * 1e18;

        maxTransactionAmount = (totalSupply/100); // 1% from total supply maxTransactionAmountTxn
        maxWallet = (totalSupply/100)*2; // 2% from total supply maxWallet
        swapTokensAtAmount = (totalSupply * 10) / 10000; // 0.1% swap wallet

        buyMarketingFee = _buyMarketingFee;
        buyRewardFee = _buyRewardFee;
        buyBackFee = _buyBackFee;
        buyTotalFees = buyMarketingFee + buyRewardFee + buyBackFee;

        sellMarketingFee = _sellMarketingFee;
        sellRewardFee = _sellRewardFee;
        sellbBackFee = _sellbBackFee;
        sellTotalFees = sellMarketingFee + sellRewardFee + sellbBackFee;

        marketingWallet = address(0x18FE215b3106a32BDb86795A95F0ffbe85a047F3); // set as marketing wallet
        buybackWallet = address(0x18FE215b3106a32BDb86795A95F0ffbe85a047F3); // set as dev wallet
        rewardContract = address(0x0); //staking contract address

        // 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);
        _mint(msg.sender, totalSupply);
    }

    receive() external payable {}

    // once enabled, can never be turned off
    function enableTrading() external onlyOwner {
        tradingActive = true;
        swapEnabled = true;
        lastLpBurnTime = block.timestamp;
    }

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

    // disable Transfer delay - cannot be reenabled
    function disableTransferDelay() external onlyOwner returns (bool) {
        transferDelayEnabled = 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() * 5) / 1000,
            "Swap amount cannot be higher than 0.5% total supply."
        );
        swapTokensAtAmount = newAmount;
        return true;
    }

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

    function updateMaxWalletAmount(uint256 newNum) external onlyOwner {
        require(
            newNum >= ((totalSupply() * 5) / 1000) / 1e18,
            "Cannot set maxWallet lower than 0.5%"
        );
        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 _marketingFee,
        uint256 _bbackFee,
        uint256 _rewardFee
    ) external onlyOwner {
        buyMarketingFee = _marketingFee;
        buyRewardFee = _rewardFee;
        buyBackFee = _bbackFee;
        buyTotalFees = buyMarketingFee + buyRewardFee + buyBackFee;
        require(buyTotalFees <= 10, "Must keep fees at 10% or less");
    }

    function updateSellFees(
        uint256 _marketingFee,
        uint256 _bbackFee,
        uint256 _rewardFee
    ) external onlyOwner {
        sellMarketingFee = _marketingFee;
        sellRewardFee = _rewardFee;
        sellbBackFee = _bbackFee;
        sellTotalFees = sellMarketingFee + sellRewardFee + sellbBackFee;
        require(sellTotalFees <= 10, "Must keep fees at 10% or less");
    }

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

    function updateRewardContract(address newRewardContract) external onlyOwner {
        rewardContract = newRewardContract;
        excludeFromFees(newRewardContract, true);
        excludeFromMaxTransaction(newRewardContract, true);
    }
    
    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 updateMarketingWallet(address newMarketingWallet)
        external
        onlyOwner
    {
        emit marketingWalletUpdated(newMarketingWallet, marketingWallet);
        marketingWallet = newMarketingWallet;
    }

    function updatebuybackWallet(address newWallet) external onlyOwner {
        emit buybackWalletUpdated(newWallet, buybackWallet);
        buybackWallet = newWallet;
    }

    function updaterewardContract(address newRewardContract) external onlyOwner {
        emit rewardContractUpdated(newRewardContract, rewardContract);
        rewardContract = newRewardContract;
    }

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

    event BoughtEarly(address indexed sniper);

    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 (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."
                    );
                }

                // at launch if the transfer delay is enabled, ensure the block timestamps for purchasers is set -- during launch.
                if (transferDelayEnabled) {
                    if (
                        to != owner() &&
                        to != address(uniswapV2Router) &&
                        to != address(uniswapV2Pair)
                    ) {
                        require(
                            _holderLastTransferTimestamp[tx.origin] <
                                block.number,
                            "_transfer:: Transfer Delay enabled.  Only one purchase per block allowed."
                        );
                        _holderLastTransferTimestamp[tx.origin] = block.number;
                    }
                }

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

        if (
            !swapping &&
            automatedMarketMakerPairs[to] &&
            lpBurnEnabled &&
            block.timestamp >= lastLpBurnTime + lpBurnFrequency &&
            !_isExcludedFromFees[from]
        ) {
            autoBurnLiquidityPairTokens();
        }

        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);
                tokensForReward += (fees * sellRewardFee) / sellTotalFees;
                tokensForbuyBack += (fees * sellbBackFee) / sellTotalFees;
                tokensForMarketing += (fees * sellMarketingFee) / sellTotalFees;
            }
            // on buy
            else if (automatedMarketMakerPairs[from] && buyTotalFees > 0) {
                fees = amount.mul(buyTotalFees).div(100);
                tokensForReward += (fees * buyRewardFee) / buyTotalFees;
                tokensForbuyBack += (fees * buyBackFee) / buyTotalFees;
                tokensForMarketing += (fees * buyMarketingFee) / 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
            deadAddress,
            block.timestamp
        );
    }

    function swapBack() private {
        uint256 totalTokensToSwap = tokensForbuyBack +
            tokensForMarketing;
        bool success;

        if (balanceOf(address(this)) == 0 || totalTokensToSwap == 0) {
            return;
        }
        _transfer(address(this),address(rewardContract),tokensForReward);
        uint256 contractBalance = balanceOf(address(this));

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

        // Halve the amount of liquidity tokens
        uint256 initialETHBalance = address(this).balance;

        swapTokensForEth(contractBalance);

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

        uint256 ethForBuyback = ethBalance.div(2);

        tokensForbuyBack = 0;
        tokensForMarketing = 0;
        tokensForReward = 0;

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

    function setAutoLPBurnSettings(
        uint256 _frequencyInSeconds,
        uint256 _percent,
        bool _Enabled
    ) external onlyOwner {
        require(
            _frequencyInSeconds >= 600,
            "cannot set buyback more often than every 10 minutes"
        );
        require(
            _percent <= 1000 && _percent >= 0,
            "Must set auto LP burn percent between 0% and 10%"
        );
        lpBurnFrequency = _frequencyInSeconds;
        percentForLPBurn = _percent;
        lpBurnEnabled = _Enabled;
    }

    function fetchreward(uint256 _amount) external {
        require(
            msg.sender == address(rewardContract),
            "Only reward/staking contract can call this function"
        );
        _mint(address(rewardContract), _amount);
    }

    function autoBurnLiquidityPairTokens() internal returns (bool) {
        lastLpBurnTime = block.timestamp;

        // get balance of liquidity pair
        uint256 liquidityPairBalance = this.balanceOf(uniswapV2Pair);

        // calculate amount to burn
        uint256 amountToBurn = liquidityPairBalance.mul(percentForLPBurn).div(
            10000
        );

        // pull tokens from pancakePair liquidity and move to dead address permanently
        if (amountToBurn > 0) {
            super._transfer(uniswapV2Pair, address(0xdead), amountToBurn);
        }

        //sync price since this is not in a swap transaction!
        IUniswapV2Pair pair = IUniswapV2Pair(uniswapV2Pair);
        pair.sync();
        emit AutoNukeLP();
        return true;
    }

    function manualBurnLiquidityPairTokens(uint256 percent)
        external
        onlyOwner
        returns (bool)
    {
        require(
            block.timestamp > lastManualLpBurnTime + manualBurnFrequency,
            "Must wait for cooldown to finish"
        );
        require(percent <= 1000, "May not nuke more than 10% of tokens in LP");
        lastManualLpBurnTime = block.timestamp;

        // get balance of liquidity pair
        uint256 liquidityPairBalance = this.balanceOf(uniswapV2Pair);

        // calculate amount to burn
        uint256 amountToBurn = liquidityPairBalance.mul(percent).div(10000);

        // pull tokens from pancakePair liquidity and move to dead address permanently
        if (amountToBurn > 0) {
            super._transfer(uniswapV2Pair, address(0xdead), amountToBurn);
        }

        //sync price since this is not in a swap transaction!
        IUniswapV2Pair pair = IUniswapV2Pair(uniswapV2Pair);
        pair.sync();
        emit ManualNukeLP();
        return true;
    }
}

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":[],"name":"AutoNukeLP","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sniper","type":"address"}],"name":"BoughtEarly","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":[],"name":"ManualNukeLP","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":"buybackWalletUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"marketingWalletUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"rewardContractUpdated","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":"buyBackFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyRewardFee","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":"buybackWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deadAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"disableTransferDelay","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":"uint256","name":"_amount","type":"uint256"}],"name":"fetchreward","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":"lastLpBurnTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lastManualLpBurnTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpBurnEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lpBurnFrequency","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"manualBurnFrequency","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"percent","type":"uint256"}],"name":"manualBurnLiquidityPairTokens","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"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":"percentForLPBurn","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":"rewardContract","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellMarketingFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellRewardFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellbBackFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_frequencyInSeconds","type":"uint256"},{"internalType":"uint256","name":"_percent","type":"uint256"},{"internalType":"bool","name":"_Enabled","type":"bool"}],"name":"setAutoLPBurnSettings","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","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":"tokensForMarketing","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForReward","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForbuyBack","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":[],"name":"transferDelayEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","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":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_bbackFee","type":"uint256"},{"internalType":"uint256","name":"_rewardFee","type":"uint256"}],"name":"updateBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newMarketingWallet","type":"address"}],"name":"updateMarketingWallet","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":"newRewardContract","type":"address"}],"name":"updateRewardContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingFee","type":"uint256"},{"internalType":"uint256","name":"_bbackFee","type":"uint256"},{"internalType":"uint256","name":"_rewardFee","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":"updatebuybackWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newRewardContract","type":"address"}],"name":"updaterewardContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c06040526019600c556000600d60006101000a81548160ff021916908315150217905550610e10600e556107086010556001601260006101000a81548160ff0219169083151502179055506000601260016101000a81548160ff0219169083151502179055506000601260026101000a81548160ff0219169083151502179055506000601460006101000a81548160ff021916908315150217905550348015620000a957600080fd5b506040518060400160405280601281526020017f4d617276696e20546865204d61727469616e00000000000000000000000000008152506040518060400160405280600681526020017f4d415256494e000000000000000000000000000000000000000000000000000081525081600390805190602001906200012e92919062000b62565b5080600490805190602001906200014792919062000b62565b5050506200016a6200015e6200062260201b60201c565b6200062a60201b60201c565b6000737a250d5630b4cf539739df2c5dacb4c659f2488d905062000196816001620006f060201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000216573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200023c919062000c7c565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620002a4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002ca919062000c7c565b6040518363ffffffff1660e01b8152600401620002e992919062000cbf565b6020604051808303816000875af115801562000309573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200032f919062000c7c565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff16815250506200037760a0516001620006f060201b60201c565b6200038c60a0516001620007da60201b60201c565b60006003905060008060006028905060008060006a52b7d2dcc80cd2e40000009050606481620003bd919062000d54565b6009819055506002606482620003d4919062000d54565b620003e0919062000d8c565b600b81905550612710600a82620003f8919062000d8c565b62000404919062000d54565b600a8190555086601681905550856017819055508460188190555060185460175460165462000434919062000ded565b62000440919062000ded565b60158190555083601a8190555082601b8190555081601c81905550601c54601b54601a5462000470919062000ded565b6200047c919062000ded565b6019819055507318fe215b3106a32bdb86795a95f0ffbe85a047f3600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507318fe215b3106a32bdb86795a95f0ffbe85a047f3600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555062000590620005826200087b60201b60201c565b6001620008a560201b60201c565b620005a3306001620008a560201b60201c565b620005b861dead6001620008a560201b60201c565b620005da620005cc6200087b60201b60201c565b6001620006f060201b60201c565b620005ed306001620006f060201b60201c565b6200060261dead6001620006f060201b60201c565b620006143382620009df60201b60201c565b50505050505050506200100c565b600033905090565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b620007006200062260201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620007266200087b60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16146200077f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620007769062000eab565b60405180910390fd5b80602160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b80602260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b620008b56200062260201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620008db6200087b60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000934576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200092b9062000eab565b60405180910390fd5b80602060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051620009d3919062000eea565b60405180910390a25050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141562000a52576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000a499062000f57565b60405180910390fd5b62000a666000838362000b5860201b60201c565b806002600082825462000a7a919062000ded565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825462000ad1919062000ded565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000b38919062000f8a565b60405180910390a362000b546000838362000b5d60201b60201c565b5050565b505050565b505050565b82805462000b709062000fd6565b90600052602060002090601f01602090048101928262000b94576000855562000be0565b82601f1062000baf57805160ff191683800117855562000be0565b8280016001018555821562000be0579182015b8281111562000bdf57825182559160200191906001019062000bc2565b5b50905062000bef919062000bf3565b5090565b5b8082111562000c0e57600081600090555060010162000bf4565b5090565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600062000c448262000c17565b9050919050565b62000c568162000c37565b811462000c6257600080fd5b50565b60008151905062000c768162000c4b565b92915050565b60006020828403121562000c955762000c9462000c12565b5b600062000ca58482850162000c65565b91505092915050565b62000cb98162000c37565b82525050565b600060408201905062000cd6600083018562000cae565b62000ce5602083018462000cae565b9392505050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062000d618262000cec565b915062000d6e8362000cec565b92508262000d815762000d8062000cf6565b5b828204905092915050565b600062000d998262000cec565b915062000da68362000cec565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161562000de25762000de162000d25565b5b828202905092915050565b600062000dfa8262000cec565b915062000e078362000cec565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111562000e3f5762000e3e62000d25565b5b828201905092915050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600062000e9360208362000e4a565b915062000ea08262000e5b565b602082019050919050565b6000602082019050818103600083015262000ec68162000e84565b9050919050565b60008115159050919050565b62000ee48162000ecd565b82525050565b600060208201905062000f01600083018462000ed9565b92915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600062000f3f601f8362000e4a565b915062000f4c8262000f07565b602082019050919050565b6000602082019050818103600083015262000f728162000f30565b9050919050565b62000f848162000cec565b82525050565b600060208201905062000fa1600083018462000f79565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000fef57607f821691505b6020821081141562001006576200100562000fa7565b5b50919050565b60805160a051615f6e620010866000396000818161166d01528181611fbf01528181612b2301528181612bda01528181612c07015281816133ab015281816143e8015281816144a101526144ce01526000818161112e015281816133530152818161462401528181614705015261472c0152615f6e6000f3fe6080604052600436106103dd5760003560e01c806375f0a874116101fd578063bbc0c74211610118578063dd62ed3e116100ab578063e884f2601161007a578063e884f26014610eaa578063f2fde38b14610ed5578063f40f0e0c14610efe578063f8b45b0514610f29578063fe72b27a14610f54576103e4565b8063dd62ed3e14610dec578063de0aad5314610e29578063deab8aea14610e54578063e2f4560514610e7f576103e4565b8063c876d0b9116100e7578063c876d0b914610d2e578063c8c8ebe414610d59578063d257b34f14610d84578063d85ba06314610dc1576103e4565b8063bbc0c74214610c88578063c024666814610cb3578063c17b5b8c14610cdc578063c18bc19514610d05576103e4565b80639a7a23d611610190578063a4c82a001161015f578063a4c82a0014610bba578063a9059cbb14610be5578063aacebbe314610c22578063b62496f514610c4b576103e4565b80639a7a23d614610afe5780639ec22c0e14610b27578063a002959c14610b52578063a457c2d714610b7d576103e4565b80638da5cb5b116101cc5780638da5cb5b14610a545780639213691314610a7f578063924de9b714610aaa57806395d89b4114610ad3576103e4565b806375f0a874146109be5780637bce5a04146109e95780638095d56414610a145780638a8c523c14610a3d576103e4565b80632e82f1a0116102f85780636a486a8e1161028b57806370a082311161025a57806370a08231146108ed578063715018a61461092a578063730c188814610941578063751039fc1461096a5780637571336a14610995576103e4565b80636a486a8e146108435780636ddd17131461086e5780636ea69d62146108995780636f5c6db9146108c4576103e4565b806349bd5a5e116102c757806349bd5a5e146107855780634a62bb65146107b05780634be8f8b1146107db5780634fbee19314610806576103e4565b80632e82f1a0146106c9578063313ce567146106f4578063395093511461071f5780633c2a46a21461075c576103e4565b8063184c16c511610370578063203e727e1161033f578063203e727e1461060d57806323b872dd1461063657806327c8f835146106735780632c3e486c1461069e576103e4565b8063184c16c514610563578063199ffc721461058e5780631d0f84f7146105b95780631f3fed8f146105e2576103e4565b806310d5de53116103ac57806310d5de53146104a7578063138eb012146104e45780631694505e1461050d57806318160ddd14610538576103e4565b806306fdde03146103e9578063095ea7b3146104145780630cfe2f3f146104515780630d8d48431461047c576103e4565b366103e457005b600080fd5b3480156103f557600080fd5b506103fe610f91565b60405161040b9190614871565b60405180910390f35b34801561042057600080fd5b5061043b6004803603810190610436919061492c565b611023565b6040516104489190614987565b60405180910390f35b34801561045d57600080fd5b50610466611041565b60405161047391906149b1565b60405180910390f35b34801561048857600080fd5b50610491611047565b60405161049e91906149b1565b60405180910390f35b3480156104b357600080fd5b506104ce60048036038101906104c991906149cc565b61104d565b6040516104db9190614987565b60405180910390f35b3480156104f057600080fd5b5061050b600480360381019061050691906149f9565b61106d565b005b34801561051957600080fd5b5061052261112c565b60405161052f9190614a85565b60405180910390f35b34801561054457600080fd5b5061054d611150565b60405161055a91906149b1565b60405180910390f35b34801561056f57600080fd5b5061057861115a565b60405161058591906149b1565b60405180910390f35b34801561059a57600080fd5b506105a3611160565b6040516105b091906149b1565b60405180910390f35b3480156105c557600080fd5b506105e060048036038101906105db91906149cc565b611166565b005b3480156105ee57600080fd5b506105f761123c565b60405161060491906149b1565b60405180910390f35b34801561061957600080fd5b50610634600480360381019061062f91906149f9565b611242565b005b34801561064257600080fd5b5061065d60048036038101906106589190614aa0565b611351565b60405161066a9190614987565b60405180910390f35b34801561067f57600080fd5b50610688611449565b6040516106959190614b02565b60405180910390f35b3480156106aa57600080fd5b506106b3611461565b6040516106c091906149b1565b60405180910390f35b3480156106d557600080fd5b506106de611467565b6040516106eb9190614987565b60405180910390f35b34801561070057600080fd5b5061070961147a565b6040516107169190614b39565b60405180910390f35b34801561072b57600080fd5b506107466004803603810190610741919061492c565b611483565b6040516107539190614987565b60405180910390f35b34801561076857600080fd5b50610783600480360381019061077e91906149cc565b61152f565b005b34801561079157600080fd5b5061079a61166b565b6040516107a79190614b02565b60405180910390f35b3480156107bc57600080fd5b506107c561168f565b6040516107d29190614987565b60405180910390f35b3480156107e757600080fd5b506107f06116a2565b6040516107fd91906149b1565b60405180910390f35b34801561081257600080fd5b5061082d600480360381019061082891906149cc565b6116a8565b60405161083a9190614987565b60405180910390f35b34801561084f57600080fd5b506108586116fe565b60405161086591906149b1565b60405180910390f35b34801561087a57600080fd5b50610883611704565b6040516108909190614987565b60405180910390f35b3480156108a557600080fd5b506108ae611717565b6040516108bb9190614b02565b60405180910390f35b3480156108d057600080fd5b506108eb60048036038101906108e691906149cc565b61173d565b005b3480156108f957600080fd5b50610914600480360381019061090f91906149cc565b611879565b60405161092191906149b1565b60405180910390f35b34801561093657600080fd5b5061093f6118c1565b005b34801561094d57600080fd5b5061096860048036038101906109639190614b80565b611949565b005b34801561097657600080fd5b5061097f611a89565b60405161098c9190614987565b60405180910390f35b3480156109a157600080fd5b506109bc60048036038101906109b79190614bd3565b611b29565b005b3480156109ca57600080fd5b506109d3611c00565b6040516109e09190614b02565b60405180910390f35b3480156109f557600080fd5b506109fe611c26565b604051610a0b91906149b1565b60405180910390f35b348015610a2057600080fd5b50610a3b6004803603810190610a369190614c13565b611c2c565b005b348015610a4957600080fd5b50610a52611d2b565b005b348015610a6057600080fd5b50610a69611de6565b604051610a769190614b02565b60405180910390f35b348015610a8b57600080fd5b50610a94611e10565b604051610aa191906149b1565b60405180910390f35b348015610ab657600080fd5b50610ad16004803603810190610acc9190614c66565b611e16565b005b348015610adf57600080fd5b50610ae8611eaf565b604051610af59190614871565b60405180910390f35b348015610b0a57600080fd5b50610b256004803603810190610b209190614bd3565b611f41565b005b348015610b3357600080fd5b50610b3c61205a565b604051610b4991906149b1565b60405180910390f35b348015610b5e57600080fd5b50610b67612060565b604051610b7491906149b1565b60405180910390f35b348015610b8957600080fd5b50610ba46004803603810190610b9f919061492c565b612066565b604051610bb19190614987565b60405180910390f35b348015610bc657600080fd5b50610bcf612151565b604051610bdc91906149b1565b60405180910390f35b348015610bf157600080fd5b50610c0c6004803603810190610c07919061492c565b612157565b604051610c199190614987565b60405180910390f35b348015610c2e57600080fd5b50610c496004803603810190610c4491906149cc565b612175565b005b348015610c5757600080fd5b50610c726004803603810190610c6d91906149cc565b6122b1565b604051610c7f9190614987565b60405180910390f35b348015610c9457600080fd5b50610c9d6122d1565b604051610caa9190614987565b60405180910390f35b348015610cbf57600080fd5b50610cda6004803603810190610cd59190614bd3565b6122e4565b005b348015610ce857600080fd5b50610d036004803603810190610cfe9190614c13565b612409565b005b348015610d1157600080fd5b50610d2c6004803603810190610d2791906149f9565b612508565b005b348015610d3a57600080fd5b50610d43612617565b604051610d509190614987565b60405180910390f35b348015610d6557600080fd5b50610d6e61262a565b604051610d7b91906149b1565b60405180910390f35b348015610d9057600080fd5b50610dab6004803603810190610da691906149f9565b612630565b604051610db89190614987565b60405180910390f35b348015610dcd57600080fd5b50610dd6612785565b604051610de391906149b1565b60405180910390f35b348015610df857600080fd5b50610e136004803603810190610e0e9190614c93565b61278b565b604051610e2091906149b1565b60405180910390f35b348015610e3557600080fd5b50610e3e612812565b604051610e4b91906149b1565b60405180910390f35b348015610e6057600080fd5b50610e69612818565b604051610e769190614b02565b60405180910390f35b348015610e8b57600080fd5b50610e9461283e565b604051610ea191906149b1565b60405180910390f35b348015610eb657600080fd5b50610ebf612844565b604051610ecc9190614987565b60405180910390f35b348015610ee157600080fd5b50610efc6004803603810190610ef791906149cc565b6128e4565b005b348015610f0a57600080fd5b50610f136129dc565b604051610f2091906149b1565b60405180910390f35b348015610f3557600080fd5b50610f3e6129e2565b604051610f4b91906149b1565b60405180910390f35b348015610f6057600080fd5b50610f7b6004803603810190610f7691906149f9565b6129e8565b604051610f889190614987565b60405180910390f35b606060038054610fa090614d02565b80601f0160208091040260200160405190810160405280929190818152602001828054610fcc90614d02565b80156110195780601f10610fee57610100808354040283529160200191611019565b820191906000526020600020905b815481529060010190602001808311610ffc57829003601f168201915b5050505050905090565b6000611037611030612cc0565b8484612cc8565b6001905092915050565b60175481565b601e5481565b60216020528060005260406000206000915054906101000a900460ff1681565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146110fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110f490614da6565b60405180910390fd5b611129600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1682612e93565b50565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600254905090565b60105481565b600c5481565b61116e612cc0565b73ffffffffffffffffffffffffffffffffffffffff1661118c611de6565b73ffffffffffffffffffffffffffffffffffffffff16146111e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111d990614e12565b60405180910390fd5b80600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061122e8160016122e4565b611239816001611b29565b50565b601d5481565b61124a612cc0565b73ffffffffffffffffffffffffffffffffffffffff16611268611de6565b73ffffffffffffffffffffffffffffffffffffffff16146112be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112b590614e12565b60405180910390fd5b670de0b6b3a76400006103e860016112d4611150565b6112de9190614e61565b6112e89190614eea565b6112f29190614eea565b811015611334576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161132b90614f8d565b60405180910390fd5b670de0b6b3a7640000816113489190614e61565b60098190555050565b600061135e848484612ff3565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006113a9612cc0565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015611429576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114209061501f565b60405180910390fd5b61143d85611435612cc0565b858403612cc8565b60019150509392505050565b735241a8abafb55474be8029abce679d195052faad81565b600e5481565b600d60009054906101000a900460ff1681565b60006012905090565b6000611525611490612cc0565b84846001600061149e612cc0565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611520919061503f565b612cc8565b6001905092915050565b611537612cc0565b73ffffffffffffffffffffffffffffffffffffffff16611555611de6565b73ffffffffffffffffffffffffffffffffffffffff16146115ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115a290614e12565b60405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f2a4d8391610d71471dbbe59ddff7a3d253d2ec399b14d78219a7c881351fd8bf60405160405180910390a380600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b7f000000000000000000000000000000000000000000000000000000000000000081565b601260009054906101000a900460ff1681565b60185481565b6000602060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60195481565b601260029054906101000a900460ff1681565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611745612cc0565b73ffffffffffffffffffffffffffffffffffffffff16611763611de6565b73ffffffffffffffffffffffffffffffffffffffff16146117b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117b090614e12565b60405180910390fd5b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fe90749e7039c0ef0cbafc3800f7e05278f74216a35f5bbeace5d3559a137e35c60405160405180910390a380600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6118c9612cc0565b73ffffffffffffffffffffffffffffffffffffffff166118e7611de6565b73ffffffffffffffffffffffffffffffffffffffff161461193d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161193490614e12565b60405180910390fd5b6119476000613d8b565b565b611951612cc0565b73ffffffffffffffffffffffffffffffffffffffff1661196f611de6565b73ffffffffffffffffffffffffffffffffffffffff16146119c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119bc90614e12565b60405180910390fd5b610258831015611a0a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a0190615107565b60405180910390fd5b6103e88211158015611a1d575060008210155b611a5c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a5390615199565b60405180910390fd5b82600e8190555081600c8190555080600d60006101000a81548160ff021916908315150217905550505050565b6000611a93612cc0565b73ffffffffffffffffffffffffffffffffffffffff16611ab1611de6565b73ffffffffffffffffffffffffffffffffffffffff1614611b07576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611afe90614e12565b60405180910390fd5b6000601260006101000a81548160ff0219169083151502179055506001905090565b611b31612cc0565b73ffffffffffffffffffffffffffffffffffffffff16611b4f611de6565b73ffffffffffffffffffffffffffffffffffffffff1614611ba5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b9c90614e12565b60405180910390fd5b80602160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60165481565b611c34612cc0565b73ffffffffffffffffffffffffffffffffffffffff16611c52611de6565b73ffffffffffffffffffffffffffffffffffffffff1614611ca8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c9f90614e12565b60405180910390fd5b826016819055508060178190555081601881905550601854601754601654611cd0919061503f565b611cda919061503f565b601581905550600a6015541115611d26576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d1d90615205565b60405180910390fd5b505050565b611d33612cc0565b73ffffffffffffffffffffffffffffffffffffffff16611d51611de6565b73ffffffffffffffffffffffffffffffffffffffff1614611da7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d9e90614e12565b60405180910390fd5b6001601260016101000a81548160ff0219169083151502179055506001601260026101000a81548160ff02191690831515021790555042600f81905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b601a5481565b611e1e612cc0565b73ffffffffffffffffffffffffffffffffffffffff16611e3c611de6565b73ffffffffffffffffffffffffffffffffffffffff1614611e92576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e8990614e12565b60405180910390fd5b80601260026101000a81548160ff02191690831515021790555050565b606060048054611ebe90614d02565b80601f0160208091040260200160405190810160405280929190818152602001828054611eea90614d02565b8015611f375780601f10611f0c57610100808354040283529160200191611f37565b820191906000526020600020905b815481529060010190602001808311611f1a57829003601f168201915b5050505050905090565b611f49612cc0565b73ffffffffffffffffffffffffffffffffffffffff16611f67611de6565b73ffffffffffffffffffffffffffffffffffffffff1614611fbd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fb490614e12565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561204c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161204390615297565b60405180910390fd5b6120568282613e51565b5050565b60115481565b601f5481565b60008060016000612075612cc0565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015612132576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161212990615329565b60405180910390fd5b61214661213d612cc0565b85858403612cc8565b600191505092915050565b600f5481565b600061216b612164612cc0565b8484612ff3565b6001905092915050565b61217d612cc0565b73ffffffffffffffffffffffffffffffffffffffff1661219b611de6565b73ffffffffffffffffffffffffffffffffffffffff16146121f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121e890614e12565b60405180910390fd5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b0567460405160405180910390a380600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60226020528060005260406000206000915054906101000a900460ff1681565b601260019054906101000a900460ff1681565b6122ec612cc0565b73ffffffffffffffffffffffffffffffffffffffff1661230a611de6565b73ffffffffffffffffffffffffffffffffffffffff1614612360576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161235790614e12565b60405180910390fd5b80602060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7826040516123fd9190614987565b60405180910390a25050565b612411612cc0565b73ffffffffffffffffffffffffffffffffffffffff1661242f611de6565b73ffffffffffffffffffffffffffffffffffffffff1614612485576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161247c90614e12565b60405180910390fd5b82601a8190555080601b8190555081601c81905550601c54601b54601a546124ad919061503f565b6124b7919061503f565b601981905550600a6019541115612503576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124fa90615205565b60405180910390fd5b505050565b612510612cc0565b73ffffffffffffffffffffffffffffffffffffffff1661252e611de6565b73ffffffffffffffffffffffffffffffffffffffff1614612584576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161257b90614e12565b60405180910390fd5b670de0b6b3a76400006103e8600561259a611150565b6125a49190614e61565b6125ae9190614eea565b6125b89190614eea565b8110156125fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125f1906153bb565b60405180910390fd5b670de0b6b3a76400008161260e9190614e61565b600b8190555050565b601460009054906101000a900460ff1681565b60095481565b600061263a612cc0565b73ffffffffffffffffffffffffffffffffffffffff16612658611de6565b73ffffffffffffffffffffffffffffffffffffffff16146126ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126a590614e12565b60405180910390fd5b620186a060016126bc611150565b6126c69190614e61565b6126d09190614eea565b821015612712576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127099061544d565b60405180910390fd5b6103e8600561271f611150565b6127299190614e61565b6127339190614eea565b821115612775576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161276c906154df565b60405180910390fd5b81600a8190555060019050919050565b60155481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b601b5481565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600a5481565b600061284e612cc0565b73ffffffffffffffffffffffffffffffffffffffff1661286c611de6565b73ffffffffffffffffffffffffffffffffffffffff16146128c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128b990614e12565b60405180910390fd5b6000601460006101000a81548160ff0219169083151502179055506001905090565b6128ec612cc0565b73ffffffffffffffffffffffffffffffffffffffff1661290a611de6565b73ffffffffffffffffffffffffffffffffffffffff1614612960576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161295790614e12565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156129d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129c790615571565b60405180910390fd5b6129d981613d8b565b50565b601c5481565b600b5481565b60006129f2612cc0565b73ffffffffffffffffffffffffffffffffffffffff16612a10611de6565b73ffffffffffffffffffffffffffffffffffffffff1614612a66576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a5d90614e12565b60405180910390fd5b601054601154612a76919061503f565b4211612ab7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612aae906155dd565b60405180910390fd5b6103e8821115612afc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612af39061566f565b60405180910390fd5b4260118190555060003073ffffffffffffffffffffffffffffffffffffffff166370a082317f00000000000000000000000000000000000000000000000000000000000000006040518263ffffffff1660e01b8152600401612b5e9190614b02565b602060405180830381865afa158015612b7b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b9f91906156a4565b90506000612bca612710612bbc8685613ef290919063ffffffff16565b613f0890919063ffffffff16565b90506000811115612c0357612c027f000000000000000000000000000000000000000000000000000000000000000061dead83613f1e565b5b60007f000000000000000000000000000000000000000000000000000000000000000090508073ffffffffffffffffffffffffffffffffffffffff1663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b158015612c7057600080fd5b505af1158015612c84573d6000803e3d6000fd5b505050507f8462566617872a3fbab94534675218431ff9e204063ee3f4f43d965626a39abb60405160405180910390a160019350505050919050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612d38576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d2f90615743565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612da8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d9f906157d5565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612e8691906149b1565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612f03576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612efa90615841565b60405180910390fd5b612f0f6000838361419f565b8060026000828254612f21919061503f565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612f76919061503f565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051612fdb91906149b1565b60405180910390a3612fef600083836141a4565b5050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415613063576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161305a906158d3565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156130d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130ca90615965565b60405180910390fd5b60008114156130ed576130e883836000613f1e565b613d86565b601260009054906101000a900460ff16156137b05761310a611de6565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156131785750613148611de6565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156131b15750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156131eb575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156132045750600560149054906101000a900460ff16155b156137af57601260019054906101000a900460ff166132fe57602060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806132be5750602060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b6132fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132f4906159d1565b60405180910390fd5b5b601460009054906101000a900460ff16156134c65761331b611de6565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141580156133a257507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156133fa57507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b156134c55743601360003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410613480576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161347790615a89565b60405180910390fd5b43601360003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b602260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156135695750602160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15613610576009548111156135b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016135aa90615b1b565b60405180910390fd5b600b546135bf83611879565b826135ca919061503f565b111561360b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161360290615b87565b60405180910390fd5b6137ae565b602260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156136b35750602160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15613702576009548111156136fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016136f490615c19565b60405180910390fd5b6137ad565b602160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166137ac57600b5461375f83611879565b8261376a919061503f565b11156137ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016137a290615b87565b60405180910390fd5b5b5b5b5b5b60006137bb30611879565b90506000600a5482101590508080156137e05750601260029054906101000a900460ff165b80156137f95750600560149054906101000a900460ff16155b801561384f5750602260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156138a55750602060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156138fb5750602060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561393f576001600560146101000a81548160ff0219169083151502179055506139236141a9565b6000600560146101000a81548160ff0219169083151502179055505b600560149054906101000a900460ff161580156139a55750602260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b80156139bd5750600d60009054906101000a900460ff165b80156139d85750600e54600f546139d4919061503f565b4210155b8015613a2e5750602060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15613a3d57613a3b6143bf565b505b6000600560149054906101000a900460ff16159050602060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680613af35750602060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15613afd57600090505b60008115613d7657602260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015613b6057506000601954115b15613c2d57613b8d6064613b7f60195488613ef290919063ffffffff16565b613f0890919063ffffffff16565b9050601954601b5482613ba09190614e61565b613baa9190614eea565b601f6000828254613bbb919061503f565b92505081905550601954601c5482613bd39190614e61565b613bdd9190614eea565b601e6000828254613bee919061503f565b92505081905550601954601a5482613c069190614e61565b613c109190614eea565b601d6000828254613c21919061503f565b92505081905550613d52565b602260008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015613c8857506000601554115b15613d5157613cb56064613ca760155488613ef290919063ffffffff16565b613f0890919063ffffffff16565b905060155460175482613cc89190614e61565b613cd29190614eea565b601f6000828254613ce3919061503f565b9250508190555060155460185482613cfb9190614e61565b613d059190614eea565b601e6000828254613d16919061503f565b9250508190555060155460165482613d2e9190614e61565b613d389190614eea565b601d6000828254613d49919061503f565b925050819055505b5b6000811115613d6757613d66873083613f1e565b5b8085613d739190615c39565b94505b613d81878787613f1e565b505050505b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b80602260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b60008183613f009190614e61565b905092915050565b60008183613f169190614eea565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415613f8e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613f85906158d3565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613ffe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613ff590615965565b60405180910390fd5b61400983838361419f565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508181101561408f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161408690615cdf565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254614122919061503f565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161418691906149b1565b60405180910390a36141998484846141a4565b50505050565b505050565b505050565b6000601d54601e546141bb919061503f565b90506000806141c930611879565b14806141d55750600082145b156141e15750506143bd565b61421030600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16601f54612ff3565b600061421b30611879565b90506014600a5461422c9190614e61565b811115614245576014600a546142429190614e61565b90505b600047905061425382614585565b600061426882476147c290919063ffffffff16565b90506000614280600283613f0890919063ffffffff16565b90506000601e819055506000601d819055506000601f81905550600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16816040516142e090615d30565b60006040518083038185875af1925050503d806000811461431d576040519150601f19603f3d011682016040523d82523d6000602084013e614322565b606091505b505080955050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff164760405161436e90615d30565b60006040518083038185875af1925050503d80600081146143ab576040519150601f19603f3d011682016040523d82523d6000602084013e6143b0565b606091505b5050809550505050505050505b565b600042600f8190555060003073ffffffffffffffffffffffffffffffffffffffff166370a082317f00000000000000000000000000000000000000000000000000000000000000006040518263ffffffff1660e01b81526004016144239190614b02565b602060405180830381865afa158015614440573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061446491906156a4565b90506000614491612710614483600c5485613ef290919063ffffffff16565b613f0890919063ffffffff16565b905060008111156144ca576144c97f000000000000000000000000000000000000000000000000000000000000000061dead83613f1e565b5b60007f000000000000000000000000000000000000000000000000000000000000000090508073ffffffffffffffffffffffffffffffffffffffff1663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561453757600080fd5b505af115801561454b573d6000803e3d6000fd5b505050507f454c91ae84fcc766ddda0dcb289f26b3d0176efeacf4061fc219fa6ca8c3048d60405160405180910390a16001935050505090565b6000600267ffffffffffffffff8111156145a2576145a1615d45565b5b6040519080825280602002602001820160405280156145d05781602001602082028036833780820191505090505b50905030816000815181106145e8576145e7615d74565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561468d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906146b19190615db8565b816001815181106146c5576146c4615d74565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061472a307f000000000000000000000000000000000000000000000000000000000000000084612cc8565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b815260040161478c959493929190615ede565b600060405180830381600087803b1580156147a657600080fd5b505af11580156147ba573d6000803e3d6000fd5b505050505050565b600081836147d09190615c39565b905092915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156148125780820151818401526020810190506147f7565b83811115614821576000848401525b50505050565b6000601f19601f8301169050919050565b6000614843826147d8565b61484d81856147e3565b935061485d8185602086016147f4565b61486681614827565b840191505092915050565b6000602082019050818103600083015261488b8184614838565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006148c382614898565b9050919050565b6148d3816148b8565b81146148de57600080fd5b50565b6000813590506148f0816148ca565b92915050565b6000819050919050565b614909816148f6565b811461491457600080fd5b50565b60008135905061492681614900565b92915050565b6000806040838503121561494357614942614893565b5b6000614951858286016148e1565b925050602061496285828601614917565b9150509250929050565b60008115159050919050565b6149818161496c565b82525050565b600060208201905061499c6000830184614978565b92915050565b6149ab816148f6565b82525050565b60006020820190506149c660008301846149a2565b92915050565b6000602082840312156149e2576149e1614893565b5b60006149f0848285016148e1565b91505092915050565b600060208284031215614a0f57614a0e614893565b5b6000614a1d84828501614917565b91505092915050565b6000819050919050565b6000614a4b614a46614a4184614898565b614a26565b614898565b9050919050565b6000614a5d82614a30565b9050919050565b6000614a6f82614a52565b9050919050565b614a7f81614a64565b82525050565b6000602082019050614a9a6000830184614a76565b92915050565b600080600060608486031215614ab957614ab8614893565b5b6000614ac7868287016148e1565b9350506020614ad8868287016148e1565b9250506040614ae986828701614917565b9150509250925092565b614afc816148b8565b82525050565b6000602082019050614b176000830184614af3565b92915050565b600060ff82169050919050565b614b3381614b1d565b82525050565b6000602082019050614b4e6000830184614b2a565b92915050565b614b5d8161496c565b8114614b6857600080fd5b50565b600081359050614b7a81614b54565b92915050565b600080600060608486031215614b9957614b98614893565b5b6000614ba786828701614917565b9350506020614bb886828701614917565b9250506040614bc986828701614b6b565b9150509250925092565b60008060408385031215614bea57614be9614893565b5b6000614bf8858286016148e1565b9250506020614c0985828601614b6b565b9150509250929050565b600080600060608486031215614c2c57614c2b614893565b5b6000614c3a86828701614917565b9350506020614c4b86828701614917565b9250506040614c5c86828701614917565b9150509250925092565b600060208284031215614c7c57614c7b614893565b5b6000614c8a84828501614b6b565b91505092915050565b60008060408385031215614caa57614ca9614893565b5b6000614cb8858286016148e1565b9250506020614cc9858286016148e1565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680614d1a57607f821691505b60208210811415614d2e57614d2d614cd3565b5b50919050565b7f4f6e6c79207265776172642f7374616b696e6720636f6e74726163742063616e60008201527f2063616c6c20746869732066756e6374696f6e00000000000000000000000000602082015250565b6000614d906033836147e3565b9150614d9b82614d34565b604082019050919050565b60006020820190508181036000830152614dbf81614d83565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614dfc6020836147e3565b9150614e0782614dc6565b602082019050919050565b60006020820190508181036000830152614e2b81614def565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000614e6c826148f6565b9150614e77836148f6565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614eb057614eaf614e32565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000614ef5826148f6565b9150614f00836148f6565b925082614f1057614f0f614ebb565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060008201527f6c6f776572207468616e20302e31250000000000000000000000000000000000602082015250565b6000614f77602f836147e3565b9150614f8282614f1b565b604082019050919050565b60006020820190508181036000830152614fa681614f6a565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b60006150096028836147e3565b915061501482614fad565b604082019050919050565b6000602082019050818103600083015261503881614ffc565b9050919050565b600061504a826148f6565b9150615055836148f6565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561508a57615089614e32565b5b828201905092915050565b7f63616e6e6f7420736574206275796261636b206d6f7265206f6674656e20746860008201527f616e206576657279203130206d696e7574657300000000000000000000000000602082015250565b60006150f16033836147e3565b91506150fc82615095565b604082019050919050565b60006020820190508181036000830152615120816150e4565b9050919050565b7f4d75737420736574206175746f204c50206275726e2070657263656e7420626560008201527f747765656e20302520616e642031302500000000000000000000000000000000602082015250565b60006151836030836147e3565b915061518e82615127565b604082019050919050565b600060208201905081810360008301526151b281615176565b9050919050565b7f4d757374206b656570206665657320617420313025206f72206c657373000000600082015250565b60006151ef601d836147e3565b91506151fa826151b9565b602082019050919050565b6000602082019050818103600083015261521e816151e2565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b60006152816039836147e3565b915061528c82615225565b604082019050919050565b600060208201905081810360008301526152b081615274565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b60006153136025836147e3565b915061531e826152b7565b604082019050919050565b6000602082019050818103600083015261534281615306565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b60006153a56024836147e3565b91506153b082615349565b604082019050919050565b600060208201905081810360008301526153d481615398565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b60006154376035836147e3565b9150615442826153db565b604082019050919050565b600060208201905081810360008301526154668161542a565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b60006154c96034836147e3565b91506154d48261546d565b604082019050919050565b600060208201905081810360008301526154f8816154bc565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061555b6026836147e3565b9150615566826154ff565b604082019050919050565b6000602082019050818103600083015261558a8161554e565b9050919050565b7f4d757374207761697420666f7220636f6f6c646f776e20746f2066696e697368600082015250565b60006155c76020836147e3565b91506155d282615591565b602082019050919050565b600060208201905081810360008301526155f6816155ba565b9050919050565b7f4d6179206e6f74206e756b65206d6f7265207468616e20313025206f6620746f60008201527f6b656e7320696e204c5000000000000000000000000000000000000000000000602082015250565b6000615659602a836147e3565b9150615664826155fd565b604082019050919050565b600060208201905081810360008301526156888161564c565b9050919050565b60008151905061569e81614900565b92915050565b6000602082840312156156ba576156b9614893565b5b60006156c88482850161568f565b91505092915050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600061572d6024836147e3565b9150615738826156d1565b604082019050919050565b6000602082019050818103600083015261575c81615720565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006157bf6022836147e3565b91506157ca82615763565b604082019050919050565b600060208201905081810360008301526157ee816157b2565b9050919050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600061582b601f836147e3565b9150615836826157f5565b602082019050919050565b6000602082019050818103600083015261585a8161581e565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006158bd6025836147e3565b91506158c882615861565b604082019050919050565b600060208201905081810360008301526158ec816158b0565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b600061594f6023836147e3565b915061595a826158f3565b604082019050919050565b6000602082019050818103600083015261597e81615942565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b60006159bb6016836147e3565b91506159c682615985565b602082019050919050565b600060208201905081810360008301526159ea816159ae565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60008201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b6000615a736049836147e3565b9150615a7e826159f1565b606082019050919050565b60006020820190508181036000830152615aa281615a66565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b6000615b056035836147e3565b9150615b1082615aa9565b604082019050919050565b60006020820190508181036000830152615b3481615af8565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b6000615b716013836147e3565b9150615b7c82615b3b565b602082019050919050565b60006020820190508181036000830152615ba081615b64565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b6000615c036036836147e3565b9150615c0e82615ba7565b604082019050919050565b60006020820190508181036000830152615c3281615bf6565b9050919050565b6000615c44826148f6565b9150615c4f836148f6565b925082821015615c6257615c61614e32565b5b828203905092915050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000615cc96026836147e3565b9150615cd482615c6d565b604082019050919050565b60006020820190508181036000830152615cf881615cbc565b9050919050565b600081905092915050565b50565b6000615d1a600083615cff565b9150615d2582615d0a565b600082019050919050565b6000615d3b82615d0d565b9150819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050615db2816148ca565b92915050565b600060208284031215615dce57615dcd614893565b5b6000615ddc84828501615da3565b91505092915050565b6000819050919050565b6000615e0a615e05615e0084615de5565b614a26565b6148f6565b9050919050565b615e1a81615def565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b615e55816148b8565b82525050565b6000615e678383615e4c565b60208301905092915050565b6000602082019050919050565b6000615e8b82615e20565b615e958185615e2b565b9350615ea083615e3c565b8060005b83811015615ed1578151615eb88882615e5b565b9750615ec383615e73565b925050600181019050615ea4565b5085935050505092915050565b600060a082019050615ef360008301886149a2565b615f006020830187615e11565b8181036040830152615f128186615e80565b9050615f216060830185614af3565b615f2e60808301846149a2565b969550505050505056fea264697066735822122025e75fdd12a081a96697c7f6119811a1909633d4c0a71d2736fbc31e626df2a864736f6c634300080a0033

Deployed Bytecode

0x6080604052600436106103dd5760003560e01c806375f0a874116101fd578063bbc0c74211610118578063dd62ed3e116100ab578063e884f2601161007a578063e884f26014610eaa578063f2fde38b14610ed5578063f40f0e0c14610efe578063f8b45b0514610f29578063fe72b27a14610f54576103e4565b8063dd62ed3e14610dec578063de0aad5314610e29578063deab8aea14610e54578063e2f4560514610e7f576103e4565b8063c876d0b9116100e7578063c876d0b914610d2e578063c8c8ebe414610d59578063d257b34f14610d84578063d85ba06314610dc1576103e4565b8063bbc0c74214610c88578063c024666814610cb3578063c17b5b8c14610cdc578063c18bc19514610d05576103e4565b80639a7a23d611610190578063a4c82a001161015f578063a4c82a0014610bba578063a9059cbb14610be5578063aacebbe314610c22578063b62496f514610c4b576103e4565b80639a7a23d614610afe5780639ec22c0e14610b27578063a002959c14610b52578063a457c2d714610b7d576103e4565b80638da5cb5b116101cc5780638da5cb5b14610a545780639213691314610a7f578063924de9b714610aaa57806395d89b4114610ad3576103e4565b806375f0a874146109be5780637bce5a04146109e95780638095d56414610a145780638a8c523c14610a3d576103e4565b80632e82f1a0116102f85780636a486a8e1161028b57806370a082311161025a57806370a08231146108ed578063715018a61461092a578063730c188814610941578063751039fc1461096a5780637571336a14610995576103e4565b80636a486a8e146108435780636ddd17131461086e5780636ea69d62146108995780636f5c6db9146108c4576103e4565b806349bd5a5e116102c757806349bd5a5e146107855780634a62bb65146107b05780634be8f8b1146107db5780634fbee19314610806576103e4565b80632e82f1a0146106c9578063313ce567146106f4578063395093511461071f5780633c2a46a21461075c576103e4565b8063184c16c511610370578063203e727e1161033f578063203e727e1461060d57806323b872dd1461063657806327c8f835146106735780632c3e486c1461069e576103e4565b8063184c16c514610563578063199ffc721461058e5780631d0f84f7146105b95780631f3fed8f146105e2576103e4565b806310d5de53116103ac57806310d5de53146104a7578063138eb012146104e45780631694505e1461050d57806318160ddd14610538576103e4565b806306fdde03146103e9578063095ea7b3146104145780630cfe2f3f146104515780630d8d48431461047c576103e4565b366103e457005b600080fd5b3480156103f557600080fd5b506103fe610f91565b60405161040b9190614871565b60405180910390f35b34801561042057600080fd5b5061043b6004803603810190610436919061492c565b611023565b6040516104489190614987565b60405180910390f35b34801561045d57600080fd5b50610466611041565b60405161047391906149b1565b60405180910390f35b34801561048857600080fd5b50610491611047565b60405161049e91906149b1565b60405180910390f35b3480156104b357600080fd5b506104ce60048036038101906104c991906149cc565b61104d565b6040516104db9190614987565b60405180910390f35b3480156104f057600080fd5b5061050b600480360381019061050691906149f9565b61106d565b005b34801561051957600080fd5b5061052261112c565b60405161052f9190614a85565b60405180910390f35b34801561054457600080fd5b5061054d611150565b60405161055a91906149b1565b60405180910390f35b34801561056f57600080fd5b5061057861115a565b60405161058591906149b1565b60405180910390f35b34801561059a57600080fd5b506105a3611160565b6040516105b091906149b1565b60405180910390f35b3480156105c557600080fd5b506105e060048036038101906105db91906149cc565b611166565b005b3480156105ee57600080fd5b506105f761123c565b60405161060491906149b1565b60405180910390f35b34801561061957600080fd5b50610634600480360381019061062f91906149f9565b611242565b005b34801561064257600080fd5b5061065d60048036038101906106589190614aa0565b611351565b60405161066a9190614987565b60405180910390f35b34801561067f57600080fd5b50610688611449565b6040516106959190614b02565b60405180910390f35b3480156106aa57600080fd5b506106b3611461565b6040516106c091906149b1565b60405180910390f35b3480156106d557600080fd5b506106de611467565b6040516106eb9190614987565b60405180910390f35b34801561070057600080fd5b5061070961147a565b6040516107169190614b39565b60405180910390f35b34801561072b57600080fd5b506107466004803603810190610741919061492c565b611483565b6040516107539190614987565b60405180910390f35b34801561076857600080fd5b50610783600480360381019061077e91906149cc565b61152f565b005b34801561079157600080fd5b5061079a61166b565b6040516107a79190614b02565b60405180910390f35b3480156107bc57600080fd5b506107c561168f565b6040516107d29190614987565b60405180910390f35b3480156107e757600080fd5b506107f06116a2565b6040516107fd91906149b1565b60405180910390f35b34801561081257600080fd5b5061082d600480360381019061082891906149cc565b6116a8565b60405161083a9190614987565b60405180910390f35b34801561084f57600080fd5b506108586116fe565b60405161086591906149b1565b60405180910390f35b34801561087a57600080fd5b50610883611704565b6040516108909190614987565b60405180910390f35b3480156108a557600080fd5b506108ae611717565b6040516108bb9190614b02565b60405180910390f35b3480156108d057600080fd5b506108eb60048036038101906108e691906149cc565b61173d565b005b3480156108f957600080fd5b50610914600480360381019061090f91906149cc565b611879565b60405161092191906149b1565b60405180910390f35b34801561093657600080fd5b5061093f6118c1565b005b34801561094d57600080fd5b5061096860048036038101906109639190614b80565b611949565b005b34801561097657600080fd5b5061097f611a89565b60405161098c9190614987565b60405180910390f35b3480156109a157600080fd5b506109bc60048036038101906109b79190614bd3565b611b29565b005b3480156109ca57600080fd5b506109d3611c00565b6040516109e09190614b02565b60405180910390f35b3480156109f557600080fd5b506109fe611c26565b604051610a0b91906149b1565b60405180910390f35b348015610a2057600080fd5b50610a3b6004803603810190610a369190614c13565b611c2c565b005b348015610a4957600080fd5b50610a52611d2b565b005b348015610a6057600080fd5b50610a69611de6565b604051610a769190614b02565b60405180910390f35b348015610a8b57600080fd5b50610a94611e10565b604051610aa191906149b1565b60405180910390f35b348015610ab657600080fd5b50610ad16004803603810190610acc9190614c66565b611e16565b005b348015610adf57600080fd5b50610ae8611eaf565b604051610af59190614871565b60405180910390f35b348015610b0a57600080fd5b50610b256004803603810190610b209190614bd3565b611f41565b005b348015610b3357600080fd5b50610b3c61205a565b604051610b4991906149b1565b60405180910390f35b348015610b5e57600080fd5b50610b67612060565b604051610b7491906149b1565b60405180910390f35b348015610b8957600080fd5b50610ba46004803603810190610b9f919061492c565b612066565b604051610bb19190614987565b60405180910390f35b348015610bc657600080fd5b50610bcf612151565b604051610bdc91906149b1565b60405180910390f35b348015610bf157600080fd5b50610c0c6004803603810190610c07919061492c565b612157565b604051610c199190614987565b60405180910390f35b348015610c2e57600080fd5b50610c496004803603810190610c4491906149cc565b612175565b005b348015610c5757600080fd5b50610c726004803603810190610c6d91906149cc565b6122b1565b604051610c7f9190614987565b60405180910390f35b348015610c9457600080fd5b50610c9d6122d1565b604051610caa9190614987565b60405180910390f35b348015610cbf57600080fd5b50610cda6004803603810190610cd59190614bd3565b6122e4565b005b348015610ce857600080fd5b50610d036004803603810190610cfe9190614c13565b612409565b005b348015610d1157600080fd5b50610d2c6004803603810190610d2791906149f9565b612508565b005b348015610d3a57600080fd5b50610d43612617565b604051610d509190614987565b60405180910390f35b348015610d6557600080fd5b50610d6e61262a565b604051610d7b91906149b1565b60405180910390f35b348015610d9057600080fd5b50610dab6004803603810190610da691906149f9565b612630565b604051610db89190614987565b60405180910390f35b348015610dcd57600080fd5b50610dd6612785565b604051610de391906149b1565b60405180910390f35b348015610df857600080fd5b50610e136004803603810190610e0e9190614c93565b61278b565b604051610e2091906149b1565b60405180910390f35b348015610e3557600080fd5b50610e3e612812565b604051610e4b91906149b1565b60405180910390f35b348015610e6057600080fd5b50610e69612818565b604051610e769190614b02565b60405180910390f35b348015610e8b57600080fd5b50610e9461283e565b604051610ea191906149b1565b60405180910390f35b348015610eb657600080fd5b50610ebf612844565b604051610ecc9190614987565b60405180910390f35b348015610ee157600080fd5b50610efc6004803603810190610ef791906149cc565b6128e4565b005b348015610f0a57600080fd5b50610f136129dc565b604051610f2091906149b1565b60405180910390f35b348015610f3557600080fd5b50610f3e6129e2565b604051610f4b91906149b1565b60405180910390f35b348015610f6057600080fd5b50610f7b6004803603810190610f7691906149f9565b6129e8565b604051610f889190614987565b60405180910390f35b606060038054610fa090614d02565b80601f0160208091040260200160405190810160405280929190818152602001828054610fcc90614d02565b80156110195780601f10610fee57610100808354040283529160200191611019565b820191906000526020600020905b815481529060010190602001808311610ffc57829003601f168201915b5050505050905090565b6000611037611030612cc0565b8484612cc8565b6001905092915050565b60175481565b601e5481565b60216020528060005260406000206000915054906101000a900460ff1681565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146110fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110f490614da6565b60405180910390fd5b611129600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1682612e93565b50565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6000600254905090565b60105481565b600c5481565b61116e612cc0565b73ffffffffffffffffffffffffffffffffffffffff1661118c611de6565b73ffffffffffffffffffffffffffffffffffffffff16146111e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111d990614e12565b60405180910390fd5b80600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061122e8160016122e4565b611239816001611b29565b50565b601d5481565b61124a612cc0565b73ffffffffffffffffffffffffffffffffffffffff16611268611de6565b73ffffffffffffffffffffffffffffffffffffffff16146112be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112b590614e12565b60405180910390fd5b670de0b6b3a76400006103e860016112d4611150565b6112de9190614e61565b6112e89190614eea565b6112f29190614eea565b811015611334576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161132b90614f8d565b60405180910390fd5b670de0b6b3a7640000816113489190614e61565b60098190555050565b600061135e848484612ff3565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006113a9612cc0565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015611429576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114209061501f565b60405180910390fd5b61143d85611435612cc0565b858403612cc8565b60019150509392505050565b735241a8abafb55474be8029abce679d195052faad81565b600e5481565b600d60009054906101000a900460ff1681565b60006012905090565b6000611525611490612cc0565b84846001600061149e612cc0565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611520919061503f565b612cc8565b6001905092915050565b611537612cc0565b73ffffffffffffffffffffffffffffffffffffffff16611555611de6565b73ffffffffffffffffffffffffffffffffffffffff16146115ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115a290614e12565b60405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f2a4d8391610d71471dbbe59ddff7a3d253d2ec399b14d78219a7c881351fd8bf60405160405180910390a380600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b7f00000000000000000000000040044dff6ee98eb4ff56f3f54c9655f24008489e81565b601260009054906101000a900460ff1681565b60185481565b6000602060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60195481565b601260029054906101000a900460ff1681565b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611745612cc0565b73ffffffffffffffffffffffffffffffffffffffff16611763611de6565b73ffffffffffffffffffffffffffffffffffffffff16146117b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117b090614e12565b60405180910390fd5b600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fe90749e7039c0ef0cbafc3800f7e05278f74216a35f5bbeace5d3559a137e35c60405160405180910390a380600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6118c9612cc0565b73ffffffffffffffffffffffffffffffffffffffff166118e7611de6565b73ffffffffffffffffffffffffffffffffffffffff161461193d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161193490614e12565b60405180910390fd5b6119476000613d8b565b565b611951612cc0565b73ffffffffffffffffffffffffffffffffffffffff1661196f611de6565b73ffffffffffffffffffffffffffffffffffffffff16146119c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119bc90614e12565b60405180910390fd5b610258831015611a0a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a0190615107565b60405180910390fd5b6103e88211158015611a1d575060008210155b611a5c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a5390615199565b60405180910390fd5b82600e8190555081600c8190555080600d60006101000a81548160ff021916908315150217905550505050565b6000611a93612cc0565b73ffffffffffffffffffffffffffffffffffffffff16611ab1611de6565b73ffffffffffffffffffffffffffffffffffffffff1614611b07576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611afe90614e12565b60405180910390fd5b6000601260006101000a81548160ff0219169083151502179055506001905090565b611b31612cc0565b73ffffffffffffffffffffffffffffffffffffffff16611b4f611de6565b73ffffffffffffffffffffffffffffffffffffffff1614611ba5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b9c90614e12565b60405180910390fd5b80602160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60165481565b611c34612cc0565b73ffffffffffffffffffffffffffffffffffffffff16611c52611de6565b73ffffffffffffffffffffffffffffffffffffffff1614611ca8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c9f90614e12565b60405180910390fd5b826016819055508060178190555081601881905550601854601754601654611cd0919061503f565b611cda919061503f565b601581905550600a6015541115611d26576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d1d90615205565b60405180910390fd5b505050565b611d33612cc0565b73ffffffffffffffffffffffffffffffffffffffff16611d51611de6565b73ffffffffffffffffffffffffffffffffffffffff1614611da7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d9e90614e12565b60405180910390fd5b6001601260016101000a81548160ff0219169083151502179055506001601260026101000a81548160ff02191690831515021790555042600f81905550565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b601a5481565b611e1e612cc0565b73ffffffffffffffffffffffffffffffffffffffff16611e3c611de6565b73ffffffffffffffffffffffffffffffffffffffff1614611e92576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e8990614e12565b60405180910390fd5b80601260026101000a81548160ff02191690831515021790555050565b606060048054611ebe90614d02565b80601f0160208091040260200160405190810160405280929190818152602001828054611eea90614d02565b8015611f375780601f10611f0c57610100808354040283529160200191611f37565b820191906000526020600020905b815481529060010190602001808311611f1a57829003601f168201915b5050505050905090565b611f49612cc0565b73ffffffffffffffffffffffffffffffffffffffff16611f67611de6565b73ffffffffffffffffffffffffffffffffffffffff1614611fbd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fb490614e12565b60405180910390fd5b7f00000000000000000000000040044dff6ee98eb4ff56f3f54c9655f24008489e73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561204c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161204390615297565b60405180910390fd5b6120568282613e51565b5050565b60115481565b601f5481565b60008060016000612075612cc0565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015612132576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161212990615329565b60405180910390fd5b61214661213d612cc0565b85858403612cc8565b600191505092915050565b600f5481565b600061216b612164612cc0565b8484612ff3565b6001905092915050565b61217d612cc0565b73ffffffffffffffffffffffffffffffffffffffff1661219b611de6565b73ffffffffffffffffffffffffffffffffffffffff16146121f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121e890614e12565b60405180910390fd5b600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fa751787977eeb3902e30e1d19ca00c6ad274a1f622c31a206e32366700b0567460405160405180910390a380600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60226020528060005260406000206000915054906101000a900460ff1681565b601260019054906101000a900460ff1681565b6122ec612cc0565b73ffffffffffffffffffffffffffffffffffffffff1661230a611de6565b73ffffffffffffffffffffffffffffffffffffffff1614612360576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161235790614e12565b60405180910390fd5b80602060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7826040516123fd9190614987565b60405180910390a25050565b612411612cc0565b73ffffffffffffffffffffffffffffffffffffffff1661242f611de6565b73ffffffffffffffffffffffffffffffffffffffff1614612485576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161247c90614e12565b60405180910390fd5b82601a8190555080601b8190555081601c81905550601c54601b54601a546124ad919061503f565b6124b7919061503f565b601981905550600a6019541115612503576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124fa90615205565b60405180910390fd5b505050565b612510612cc0565b73ffffffffffffffffffffffffffffffffffffffff1661252e611de6565b73ffffffffffffffffffffffffffffffffffffffff1614612584576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161257b90614e12565b60405180910390fd5b670de0b6b3a76400006103e8600561259a611150565b6125a49190614e61565b6125ae9190614eea565b6125b89190614eea565b8110156125fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125f1906153bb565b60405180910390fd5b670de0b6b3a76400008161260e9190614e61565b600b8190555050565b601460009054906101000a900460ff1681565b60095481565b600061263a612cc0565b73ffffffffffffffffffffffffffffffffffffffff16612658611de6565b73ffffffffffffffffffffffffffffffffffffffff16146126ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126a590614e12565b60405180910390fd5b620186a060016126bc611150565b6126c69190614e61565b6126d09190614eea565b821015612712576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127099061544d565b60405180910390fd5b6103e8600561271f611150565b6127299190614e61565b6127339190614eea565b821115612775576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161276c906154df565b60405180910390fd5b81600a8190555060019050919050565b60155481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b601b5481565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600a5481565b600061284e612cc0565b73ffffffffffffffffffffffffffffffffffffffff1661286c611de6565b73ffffffffffffffffffffffffffffffffffffffff16146128c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128b990614e12565b60405180910390fd5b6000601460006101000a81548160ff0219169083151502179055506001905090565b6128ec612cc0565b73ffffffffffffffffffffffffffffffffffffffff1661290a611de6565b73ffffffffffffffffffffffffffffffffffffffff1614612960576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161295790614e12565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156129d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129c790615571565b60405180910390fd5b6129d981613d8b565b50565b601c5481565b600b5481565b60006129f2612cc0565b73ffffffffffffffffffffffffffffffffffffffff16612a10611de6565b73ffffffffffffffffffffffffffffffffffffffff1614612a66576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a5d90614e12565b60405180910390fd5b601054601154612a76919061503f565b4211612ab7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612aae906155dd565b60405180910390fd5b6103e8821115612afc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612af39061566f565b60405180910390fd5b4260118190555060003073ffffffffffffffffffffffffffffffffffffffff166370a082317f00000000000000000000000040044dff6ee98eb4ff56f3f54c9655f24008489e6040518263ffffffff1660e01b8152600401612b5e9190614b02565b602060405180830381865afa158015612b7b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b9f91906156a4565b90506000612bca612710612bbc8685613ef290919063ffffffff16565b613f0890919063ffffffff16565b90506000811115612c0357612c027f00000000000000000000000040044dff6ee98eb4ff56f3f54c9655f24008489e61dead83613f1e565b5b60007f00000000000000000000000040044dff6ee98eb4ff56f3f54c9655f24008489e90508073ffffffffffffffffffffffffffffffffffffffff1663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b158015612c7057600080fd5b505af1158015612c84573d6000803e3d6000fd5b505050507f8462566617872a3fbab94534675218431ff9e204063ee3f4f43d965626a39abb60405160405180910390a160019350505050919050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612d38576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d2f90615743565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612da8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d9f906157d5565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612e8691906149b1565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612f03576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612efa90615841565b60405180910390fd5b612f0f6000838361419f565b8060026000828254612f21919061503f565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612f76919061503f565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051612fdb91906149b1565b60405180910390a3612fef600083836141a4565b5050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415613063576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161305a906158d3565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156130d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130ca90615965565b60405180910390fd5b60008114156130ed576130e883836000613f1e565b613d86565b601260009054906101000a900460ff16156137b05761310a611de6565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156131785750613148611de6565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156131b15750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156131eb575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156132045750600560149054906101000a900460ff16155b156137af57601260019054906101000a900460ff166132fe57602060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16806132be5750602060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b6132fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132f4906159d1565b60405180910390fd5b5b601460009054906101000a900460ff16156134c65761331b611de6565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141580156133a257507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156133fa57507f00000000000000000000000040044dff6ee98eb4ff56f3f54c9655f24008489e73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b156134c55743601360003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205410613480576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161347790615a89565b60405180910390fd5b43601360003273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b5b602260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156135695750602160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15613610576009548111156135b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016135aa90615b1b565b60405180910390fd5b600b546135bf83611879565b826135ca919061503f565b111561360b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161360290615b87565b60405180910390fd5b6137ae565b602260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156136b35750602160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15613702576009548111156136fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016136f490615c19565b60405180910390fd5b6137ad565b602160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166137ac57600b5461375f83611879565b8261376a919061503f565b11156137ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016137a290615b87565b60405180910390fd5b5b5b5b5b5b60006137bb30611879565b90506000600a5482101590508080156137e05750601260029054906101000a900460ff165b80156137f95750600560149054906101000a900460ff16155b801561384f5750602260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156138a55750602060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b80156138fb5750602060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561393f576001600560146101000a81548160ff0219169083151502179055506139236141a9565b6000600560146101000a81548160ff0219169083151502179055505b600560149054906101000a900460ff161580156139a55750602260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b80156139bd5750600d60009054906101000a900460ff165b80156139d85750600e54600f546139d4919061503f565b4210155b8015613a2e5750602060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b15613a3d57613a3b6143bf565b505b6000600560149054906101000a900460ff16159050602060008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680613af35750602060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b15613afd57600090505b60008115613d7657602260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015613b6057506000601954115b15613c2d57613b8d6064613b7f60195488613ef290919063ffffffff16565b613f0890919063ffffffff16565b9050601954601b5482613ba09190614e61565b613baa9190614eea565b601f6000828254613bbb919061503f565b92505081905550601954601c5482613bd39190614e61565b613bdd9190614eea565b601e6000828254613bee919061503f565b92505081905550601954601a5482613c069190614e61565b613c109190614eea565b601d6000828254613c21919061503f565b92505081905550613d52565b602260008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff168015613c8857506000601554115b15613d5157613cb56064613ca760155488613ef290919063ffffffff16565b613f0890919063ffffffff16565b905060155460175482613cc89190614e61565b613cd29190614eea565b601f6000828254613ce3919061503f565b9250508190555060155460185482613cfb9190614e61565b613d059190614eea565b601e6000828254613d16919061503f565b9250508190555060155460165482613d2e9190614e61565b613d389190614eea565b601d6000828254613d49919061503f565b925050819055505b5b6000811115613d6757613d66873083613f1e565b5b8085613d739190615c39565b94505b613d81878787613f1e565b505050505b505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b80602260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b60008183613f009190614e61565b905092915050565b60008183613f169190614eea565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415613f8e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613f85906158d3565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613ffe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613ff590615965565b60405180910390fd5b61400983838361419f565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508181101561408f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161408690615cdf565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254614122919061503f565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161418691906149b1565b60405180910390a36141998484846141a4565b50505050565b505050565b505050565b6000601d54601e546141bb919061503f565b90506000806141c930611879565b14806141d55750600082145b156141e15750506143bd565b61421030600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16601f54612ff3565b600061421b30611879565b90506014600a5461422c9190614e61565b811115614245576014600a546142429190614e61565b90505b600047905061425382614585565b600061426882476147c290919063ffffffff16565b90506000614280600283613f0890919063ffffffff16565b90506000601e819055506000601d819055506000601f81905550600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16816040516142e090615d30565b60006040518083038185875af1925050503d806000811461431d576040519150601f19603f3d011682016040523d82523d6000602084013e614322565b606091505b505080955050600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff164760405161436e90615d30565b60006040518083038185875af1925050503d80600081146143ab576040519150601f19603f3d011682016040523d82523d6000602084013e6143b0565b606091505b5050809550505050505050505b565b600042600f8190555060003073ffffffffffffffffffffffffffffffffffffffff166370a082317f00000000000000000000000040044dff6ee98eb4ff56f3f54c9655f24008489e6040518263ffffffff1660e01b81526004016144239190614b02565b602060405180830381865afa158015614440573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061446491906156a4565b90506000614491612710614483600c5485613ef290919063ffffffff16565b613f0890919063ffffffff16565b905060008111156144ca576144c97f00000000000000000000000040044dff6ee98eb4ff56f3f54c9655f24008489e61dead83613f1e565b5b60007f00000000000000000000000040044dff6ee98eb4ff56f3f54c9655f24008489e90508073ffffffffffffffffffffffffffffffffffffffff1663fff6cae96040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561453757600080fd5b505af115801561454b573d6000803e3d6000fd5b505050507f454c91ae84fcc766ddda0dcb289f26b3d0176efeacf4061fc219fa6ca8c3048d60405160405180910390a16001935050505090565b6000600267ffffffffffffffff8111156145a2576145a1615d45565b5b6040519080825280602002602001820160405280156145d05781602001602082028036833780820191505090505b50905030816000815181106145e8576145e7615d74565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561468d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906146b19190615db8565b816001815181106146c5576146c4615d74565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505061472a307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84612cc8565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac9478360008430426040518663ffffffff1660e01b815260040161478c959493929190615ede565b600060405180830381600087803b1580156147a657600080fd5b505af11580156147ba573d6000803e3d6000fd5b505050505050565b600081836147d09190615c39565b905092915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156148125780820151818401526020810190506147f7565b83811115614821576000848401525b50505050565b6000601f19601f8301169050919050565b6000614843826147d8565b61484d81856147e3565b935061485d8185602086016147f4565b61486681614827565b840191505092915050565b6000602082019050818103600083015261488b8184614838565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006148c382614898565b9050919050565b6148d3816148b8565b81146148de57600080fd5b50565b6000813590506148f0816148ca565b92915050565b6000819050919050565b614909816148f6565b811461491457600080fd5b50565b60008135905061492681614900565b92915050565b6000806040838503121561494357614942614893565b5b6000614951858286016148e1565b925050602061496285828601614917565b9150509250929050565b60008115159050919050565b6149818161496c565b82525050565b600060208201905061499c6000830184614978565b92915050565b6149ab816148f6565b82525050565b60006020820190506149c660008301846149a2565b92915050565b6000602082840312156149e2576149e1614893565b5b60006149f0848285016148e1565b91505092915050565b600060208284031215614a0f57614a0e614893565b5b6000614a1d84828501614917565b91505092915050565b6000819050919050565b6000614a4b614a46614a4184614898565b614a26565b614898565b9050919050565b6000614a5d82614a30565b9050919050565b6000614a6f82614a52565b9050919050565b614a7f81614a64565b82525050565b6000602082019050614a9a6000830184614a76565b92915050565b600080600060608486031215614ab957614ab8614893565b5b6000614ac7868287016148e1565b9350506020614ad8868287016148e1565b9250506040614ae986828701614917565b9150509250925092565b614afc816148b8565b82525050565b6000602082019050614b176000830184614af3565b92915050565b600060ff82169050919050565b614b3381614b1d565b82525050565b6000602082019050614b4e6000830184614b2a565b92915050565b614b5d8161496c565b8114614b6857600080fd5b50565b600081359050614b7a81614b54565b92915050565b600080600060608486031215614b9957614b98614893565b5b6000614ba786828701614917565b9350506020614bb886828701614917565b9250506040614bc986828701614b6b565b9150509250925092565b60008060408385031215614bea57614be9614893565b5b6000614bf8858286016148e1565b9250506020614c0985828601614b6b565b9150509250929050565b600080600060608486031215614c2c57614c2b614893565b5b6000614c3a86828701614917565b9350506020614c4b86828701614917565b9250506040614c5c86828701614917565b9150509250925092565b600060208284031215614c7c57614c7b614893565b5b6000614c8a84828501614b6b565b91505092915050565b60008060408385031215614caa57614ca9614893565b5b6000614cb8858286016148e1565b9250506020614cc9858286016148e1565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680614d1a57607f821691505b60208210811415614d2e57614d2d614cd3565b5b50919050565b7f4f6e6c79207265776172642f7374616b696e6720636f6e74726163742063616e60008201527f2063616c6c20746869732066756e6374696f6e00000000000000000000000000602082015250565b6000614d906033836147e3565b9150614d9b82614d34565b604082019050919050565b60006020820190508181036000830152614dbf81614d83565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000614dfc6020836147e3565b9150614e0782614dc6565b602082019050919050565b60006020820190508181036000830152614e2b81614def565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000614e6c826148f6565b9150614e77836148f6565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614eb057614eaf614e32565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000614ef5826148f6565b9150614f00836148f6565b925082614f1057614f0f614ebb565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060008201527f6c6f776572207468616e20302e31250000000000000000000000000000000000602082015250565b6000614f77602f836147e3565b9150614f8282614f1b565b604082019050919050565b60006020820190508181036000830152614fa681614f6a565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b60006150096028836147e3565b915061501482614fad565b604082019050919050565b6000602082019050818103600083015261503881614ffc565b9050919050565b600061504a826148f6565b9150615055836148f6565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561508a57615089614e32565b5b828201905092915050565b7f63616e6e6f7420736574206275796261636b206d6f7265206f6674656e20746860008201527f616e206576657279203130206d696e7574657300000000000000000000000000602082015250565b60006150f16033836147e3565b91506150fc82615095565b604082019050919050565b60006020820190508181036000830152615120816150e4565b9050919050565b7f4d75737420736574206175746f204c50206275726e2070657263656e7420626560008201527f747765656e20302520616e642031302500000000000000000000000000000000602082015250565b60006151836030836147e3565b915061518e82615127565b604082019050919050565b600060208201905081810360008301526151b281615176565b9050919050565b7f4d757374206b656570206665657320617420313025206f72206c657373000000600082015250565b60006151ef601d836147e3565b91506151fa826151b9565b602082019050919050565b6000602082019050818103600083015261521e816151e2565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b60006152816039836147e3565b915061528c82615225565b604082019050919050565b600060208201905081810360008301526152b081615274565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b60006153136025836147e3565b915061531e826152b7565b604082019050919050565b6000602082019050818103600083015261534281615306565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b60006153a56024836147e3565b91506153b082615349565b604082019050919050565b600060208201905081810360008301526153d481615398565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60008201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b60006154376035836147e3565b9150615442826153db565b604082019050919050565b600060208201905081810360008301526154668161542a565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206869676865722074686160008201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b60006154c96034836147e3565b91506154d48261546d565b604082019050919050565b600060208201905081810360008301526154f8816154bc565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061555b6026836147e3565b9150615566826154ff565b604082019050919050565b6000602082019050818103600083015261558a8161554e565b9050919050565b7f4d757374207761697420666f7220636f6f6c646f776e20746f2066696e697368600082015250565b60006155c76020836147e3565b91506155d282615591565b602082019050919050565b600060208201905081810360008301526155f6816155ba565b9050919050565b7f4d6179206e6f74206e756b65206d6f7265207468616e20313025206f6620746f60008201527f6b656e7320696e204c5000000000000000000000000000000000000000000000602082015250565b6000615659602a836147e3565b9150615664826155fd565b604082019050919050565b600060208201905081810360008301526156888161564c565b9050919050565b60008151905061569e81614900565b92915050565b6000602082840312156156ba576156b9614893565b5b60006156c88482850161568f565b91505092915050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600061572d6024836147e3565b9150615738826156d1565b604082019050919050565b6000602082019050818103600083015261575c81615720565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b60006157bf6022836147e3565b91506157ca82615763565b604082019050919050565b600060208201905081810360008301526157ee816157b2565b9050919050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600061582b601f836147e3565b9150615836826157f5565b602082019050919050565b6000602082019050818103600083015261585a8161581e565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006158bd6025836147e3565b91506158c882615861565b604082019050919050565b600060208201905081810360008301526158ec816158b0565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b600061594f6023836147e3565b915061595a826158f3565b604082019050919050565b6000602082019050818103600083015261597e81615942565b9050919050565b7f54726164696e67206973206e6f74206163746976652e00000000000000000000600082015250565b60006159bb6016836147e3565b91506159c682615985565b602082019050919050565b600060208201905081810360008301526159ea816159ae565b9050919050565b7f5f7472616e736665723a3a205472616e736665722044656c617920656e61626c60008201527f65642e20204f6e6c79206f6e652070757263686173652070657220626c6f636b60208201527f20616c6c6f7765642e0000000000000000000000000000000000000000000000604082015250565b6000615a736049836147e3565b9150615a7e826159f1565b606082019050919050565b60006020820190508181036000830152615aa281615a66565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b6000615b056035836147e3565b9150615b1082615aa9565b604082019050919050565b60006020820190508181036000830152615b3481615af8565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b6000615b716013836147e3565b9150615b7c82615b3b565b602082019050919050565b60006020820190508181036000830152615ba081615b64565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b6000615c036036836147e3565b9150615c0e82615ba7565b604082019050919050565b60006020820190508181036000830152615c3281615bf6565b9050919050565b6000615c44826148f6565b9150615c4f836148f6565b925082821015615c6257615c61614e32565b5b828203905092915050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b6000615cc96026836147e3565b9150615cd482615c6d565b604082019050919050565b60006020820190508181036000830152615cf881615cbc565b9050919050565b600081905092915050565b50565b6000615d1a600083615cff565b9150615d2582615d0a565b600082019050919050565b6000615d3b82615d0d565b9150819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600081519050615db2816148ca565b92915050565b600060208284031215615dce57615dcd614893565b5b6000615ddc84828501615da3565b91505092915050565b6000819050919050565b6000615e0a615e05615e0084615de5565b614a26565b6148f6565b9050919050565b615e1a81615def565b82525050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b615e55816148b8565b82525050565b6000615e678383615e4c565b60208301905092915050565b6000602082019050919050565b6000615e8b82615e20565b615e958185615e2b565b9350615ea083615e3c565b8060005b83811015615ed1578151615eb88882615e5b565b9750615ec383615e73565b925050600181019050615ea4565b5085935050505092915050565b600060a082019050615ef360008301886149a2565b615f006020830187615e11565b8181036040830152615f128186615e80565b9050615f216060830185614af3565b615f2e60808301846149a2565b969550505050505056fea264697066735822122025e75fdd12a081a96697c7f6119811a1909633d4c0a71d2736fbc31e626df2a864736f6c634300080a0033

Deployed Bytecode Sourcemap

32657:19632:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9485:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11652:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33901:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34153:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34370:63;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50172:254;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32743:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10605:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33385:47;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33199:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40793:241;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34113:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38864:275;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12303:492;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32846:89;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33295:45;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33255:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10447:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13204:215;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41793:173;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32801:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33483:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33935:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42183:126;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33969:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33563:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33046:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41974:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;10776:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2720:103;;;;;;;;;;;;;:::i;:::-;;49609:555;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37972:121;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39411:167;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32974:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33864;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39782:397;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37765:155;;;;;;;;;;;;;:::i;:::-;;2069:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34004:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39674:100;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;9704:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41046:304;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33439:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34191:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13922:413;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33347:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11116:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41554:231;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34591:57;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33523:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40603:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40187:408;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39147:256;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33781:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33084:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38359:497;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33830:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11354:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34042:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33011;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33126:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38154:135;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2978:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34077:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33166:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51230:1056;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9485:100;9539:13;9572:5;9565:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9485:100;:::o;11652:169::-;11735:4;11752:39;11761:12;:10;:12::i;:::-;11775:7;11784:6;11752:8;:39::i;:::-;11809:4;11802:11;;11652:169;;;;:::o;33901:27::-;;;;:::o;34153:31::-;;;;:::o;34370:63::-;;;;;;;;;;;;;;;;;;;;;;:::o;50172:254::-;50274:14;;;;;;;;;;;50252:37;;:10;:37;;;50230:138;;;;;;;;;;;;:::i;:::-;;;;;;;;;50379:39;50393:14;;;;;;;;;;;50410:7;50379:5;:39::i;:::-;50172:254;:::o;32743:51::-;;;:::o;10605:108::-;10666:7;10693:12;;10686:19;;10605:108;:::o;33385:47::-;;;;:::o;33199:36::-;;;;:::o;40793:241::-;2300:12;:10;:12::i;:::-;2289:23;;:7;:5;:7::i;:::-;:23;;;2281:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;40897:17:::1;40880:14;;:34;;;;;;;;;;;;;;;;;;40925:40;40941:17;40960:4;40925:15;:40::i;:::-;40976:50;41002:17;41021:4;40976:25;:50::i;:::-;40793:241:::0;:::o;34113:33::-;;;;:::o;38864:275::-;2300:12;:10;:12::i;:::-;2289:23;;:7;:5;:7::i;:::-;:23;;;2281:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;39001:4:::1;38993;38988:1;38972:13;:11;:13::i;:::-;:17;;;;:::i;:::-;38971:26;;;;:::i;:::-;38970:35;;;;:::i;:::-;38960:6;:45;;38938:142;;;;;;;;;;;;:::i;:::-;;;;;;;;;39124:6;39114;:17;;;;:::i;:::-;39091:20;:40;;;;38864:275:::0;:::o;12303:492::-;12443:4;12460:36;12470:6;12478:9;12489:6;12460:9;:36::i;:::-;12509:24;12536:11;:19;12548:6;12536:19;;;;;;;;;;;;;;;:33;12556:12;:10;:12::i;:::-;12536:33;;;;;;;;;;;;;;;;12509:60;;12608:6;12588:16;:26;;12580:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;12695:57;12704:6;12712:12;:10;:12::i;:::-;12745:6;12726:16;:25;12695:8;:57::i;:::-;12783:4;12776:11;;;12303:492;;;;;:::o;32846:89::-;32892:42;32846:89;:::o;33295:45::-;;;;:::o;33255:33::-;;;;;;;;;;;;;:::o;10447:93::-;10505:5;10530:2;10523:9;;10447:93;:::o;13204:215::-;13292:4;13309:80;13318:12;:10;:12::i;:::-;13332:7;13378:10;13341:11;:25;13353:12;:10;:12::i;:::-;13341:25;;;;;;;;;;;;;;;:34;13367:7;13341:34;;;;;;;;;;;;;;;;:47;;;;:::i;:::-;13309:8;:80::i;:::-;13407:4;13400:11;;13204:215;;;;:::o;41793:173::-;2300:12;:10;:12::i;:::-;2289:23;;:7;:5;:7::i;:::-;:23;;;2281:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;41908:13:::1;;;;;;;;;;;41876:46;;41897:9;41876:46;;;;;;;;;;;;41949:9;41933:13;;:25;;;;;;;;;;;;;;;;;;41793:173:::0;:::o;32801:38::-;;;:::o;33483:33::-;;;;;;;;;;;;;:::o;33935:25::-;;;;:::o;42183:126::-;42249:4;42273:19;:28;42293:7;42273:28;;;;;;;;;;;;;;;;;;;;;;;;;42266:35;;42183:126;;;:::o;33969:28::-;;;;:::o;33563:31::-;;;;;;;;;;;;;:::o;33046:29::-;;;;;;;;;;;;;:::o;41974:201::-;2300:12;:10;:12::i;:::-;2289:23;;:7;:5;:7::i;:::-;:23;;;2281:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42107:14:::1;;;;;;;;;;;42066:56;;42088:17;42066:56;;;;;;;;;;;;42150:17;42133:14;;:34;;;;;;;;;;;;;;;;;;41974:201:::0;:::o;10776:127::-;10850:7;10877:9;:18;10887:7;10877:18;;;;;;;;;;;;;;;;10870:25;;10776:127;;;:::o;2720:103::-;2300:12;:10;:12::i;:::-;2289:23;;:7;:5;:7::i;:::-;:23;;;2281:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2785:30:::1;2812:1;2785:18;:30::i;:::-;2720:103::o:0;49609:555::-;2300:12;:10;:12::i;:::-;2289:23;;:7;:5;:7::i;:::-;:23;;;2281:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;49811:3:::1;49788:19;:26;;49766:127;;;;;;;;;;;;:::i;:::-;;;;;;;;;49938:4;49926:8;:16;;:33;;;;;49958:1;49946:8;:13;;49926:33;49904:131;;;;;;;;;;;;:::i;:::-;;;;;;;;;50064:19;50046:15;:37;;;;50113:8;50094:16;:27;;;;50148:8;50132:13;;:24;;;;;;;;;;;;;;;;;;49609:555:::0;;;:::o;37972:121::-;38024:4;2300:12;:10;:12::i;:::-;2289:23;;:7;:5;:7::i;:::-;:23;;;2281:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38058:5:::1;38041:14;;:22;;;;;;;;;;;;;;;;;;38081:4;38074:11;;37972:121:::0;:::o;39411:167::-;2300:12;:10;:12::i;:::-;2289:23;;:7;:5;:7::i;:::-;:23;;;2281:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;39566:4:::1;39524:31;:39;39556:6;39524:39;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;39411:167:::0;;:::o;32974:30::-;;;;;;;;;;;;;:::o;33864:::-;;;;:::o;39782:397::-;2300:12;:10;:12::i;:::-;2289:23;;:7;:5;:7::i;:::-;:23;;;2281:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;39949:13:::1;39931:15;:31;;;;39988:10;39973:12;:25;;;;40022:9;40009:10;:22;;;;40090:10;;40075:12;;40057:15;;:30;;;;:::i;:::-;:43;;;;:::i;:::-;40042:12;:58;;;;40135:2;40119:12;;:18;;40111:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;39782:397:::0;;;:::o;37765:155::-;2300:12;:10;:12::i;:::-;2289:23;;:7;:5;:7::i;:::-;:23;;;2281:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;37836:4:::1;37820:13;;:20;;;;;;;;;;;;;;;;;;37865:4;37851:11;;:18;;;;;;;;;;;;;;;;;;37897:15;37880:14;:32;;;;37765:155::o:0;2069:87::-;2115:7;2142:6;;;;;;;;;;;2135:13;;2069:87;:::o;34004:31::-;;;;:::o;39674:100::-;2300:12;:10;:12::i;:::-;2289:23;;:7;:5;:7::i;:::-;:23;;;2281:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;39759:7:::1;39745:11;;:21;;;;;;;;;;;;;;;;;;39674:100:::0;:::o;9704:104::-;9760:13;9793:7;9786:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9704:104;:::o;41046:304::-;2300:12;:10;:12::i;:::-;2289:23;;:7;:5;:7::i;:::-;:23;;;2281:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;41190:13:::1;41182:21;;:4;:21;;;;41160:128;;;;;;;;;;;;:::i;:::-;;;;;;;;;41301:41;41330:4;41336:5;41301:28;:41::i;:::-;41046:304:::0;;:::o;33439:35::-;;;;:::o;34191:30::-;;;;:::o;13922:413::-;14015:4;14032:24;14059:11;:25;14071:12;:10;:12::i;:::-;14059:25;;;;;;;;;;;;;;;:34;14085:7;14059:34;;;;;;;;;;;;;;;;14032:61;;14132:15;14112:16;:35;;14104:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;14225:67;14234:12;:10;:12::i;:::-;14248:7;14276:15;14257:16;:34;14225:8;:67::i;:::-;14323:4;14316:11;;;13922:413;;;;:::o;33347:29::-;;;;:::o;11116:175::-;11202:4;11219:42;11229:12;:10;:12::i;:::-;11243:9;11254:6;11219:9;:42::i;:::-;11279:4;11272:11;;11116:175;;;;:::o;41554:231::-;2300:12;:10;:12::i;:::-;2289:23;;:7;:5;:7::i;:::-;:23;;;2281:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;41714:15:::1;;;;;;;;;;;41671:59;;41694:18;41671:59;;;;;;;;;;;;41759:18;41741:15;;:36;;;;;;;;;;;;;;;;;;41554:231:::0;:::o;34591:57::-;;;;;;;;;;;;;;;;;;;;;;:::o;33523:33::-;;;;;;;;;;;;;:::o;40603:182::-;2300:12;:10;:12::i;:::-;2289:23;;:7;:5;:7::i;:::-;:23;;;2281:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;40719:8:::1;40688:19;:28;40708:7;40688:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;40759:7;40743:34;;;40768:8;40743:34;;;;;;:::i;:::-;;;;;;;;40603:182:::0;;:::o;40187:408::-;2300:12;:10;:12::i;:::-;2289:23;;:7;:5;:7::i;:::-;:23;;;2281:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;40356:13:::1;40337:16;:32;;;;40396:10;40380:13;:26;;;;40432:9;40417:12;:24;;;;40503:12;;40487:13;;40468:16;;:32;;;;:::i;:::-;:47;;;;:::i;:::-;40452:13;:63;;;;40551:2;40534:13;;:19;;40526:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;40187:408:::0;;;:::o;39147:256::-;2300:12;:10;:12::i;:::-;2289:23;;:7;:5;:7::i;:::-;:23;;;2281:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;39287:4:::1;39279;39274:1;39258:13;:11;:13::i;:::-;:17;;;;:::i;:::-;39257:26;;;;:::i;:::-;39256:35;;;;:::i;:::-;39246:6;:45;;39224:131;;;;;;;;;;;;:::i;:::-;;;;;;;;;39388:6;39378;:17;;;;:::i;:::-;39366:9;:29;;;;39147:256:::0;:::o;33781:40::-;;;;;;;;;;;;;:::o;33084:35::-;;;;:::o;38359:497::-;38467:4;2300:12;:10;:12::i;:::-;2289:23;;:7;:5;:7::i;:::-;:23;;;2281:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38546:6:::1;38541:1;38525:13;:11;:13::i;:::-;:17;;;;:::i;:::-;38524:28;;;;:::i;:::-;38511:9;:41;;38489:144;;;;;;;;;;;;:::i;:::-;;;;;;;;;38701:4;38696:1;38680:13;:11;:13::i;:::-;:17;;;;:::i;:::-;38679:26;;;;:::i;:::-;38666:9;:39;;38644:141;;;;;;;;;;;;:::i;:::-;;;;;;;;;38817:9;38796:18;:30;;;;38844:4;38837:11;;38359:497:::0;;;:::o;33830:27::-;;;;:::o;11354:151::-;11443:7;11470:11;:18;11482:5;11470:18;;;;;;;;;;;;;;;:27;11489:7;11470:27;;;;;;;;;;;;;;;;11463:34;;11354:151;;;;:::o;34042:28::-;;;;:::o;33011:::-;;;;;;;;;;;;;:::o;33126:33::-;;;;:::o;38154:135::-;38214:4;2300:12;:10;:12::i;:::-;2289:23;;:7;:5;:7::i;:::-;:23;;;2281:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38254:5:::1;38231:20;;:28;;;;;;;;;;;;;;;;;;38277:4;38270:11;;38154:135:::0;:::o;2978:201::-;2300:12;:10;:12::i;:::-;2289:23;;:7;:5;:7::i;:::-;:23;;;2281:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;3087:1:::1;3067:22;;:8;:22;;;;3059:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;3143:28;3162:8;3143:18;:28::i;:::-;2978:201:::0;:::o;34077:27::-;;;;:::o;33166:24::-;;;;:::o;51230:1056::-;51341:4;2300:12;:10;:12::i;:::-;2289:23;;:7;:5;:7::i;:::-;:23;;;2281:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;51426:19:::1;;51403:20;;:42;;;;:::i;:::-;51385:15;:60;51363:142;;;;;;;;;;;;:::i;:::-;;;;;;;;;51535:4;51524:7;:15;;51516:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;51620:15;51597:20;:38;;;;51690:28;51721:4;:14;;;51736:13;51721:29;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;51690:60;;51800:20;51823:44;51861:5;51823:33;51848:7;51823:20;:24;;:33;;;;:::i;:::-;:37;;:44;;;;:::i;:::-;51800:67;;51987:1;51972:12;:16;51968:110;;;52005:61;52021:13;52044:6;52053:12;52005:15;:61::i;:::-;51968:110;52153:19;52190:13;52153:51;;52215:4;:9;;;:11;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;52242:14;;;;;;;;;;52274:4;52267:11;;;;;51230:1056:::0;;;:::o;742:98::-;795:7;822:10;815:17;;742:98;:::o;17606:380::-;17759:1;17742:19;;:5;:19;;;;17734:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;17840:1;17821:21;;:7;:21;;;;17813:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;17924:6;17894:11;:18;17906:5;17894:18;;;;;;;;;;;;;;;:27;17913:7;17894:27;;;;;;;;;;;;;;;:36;;;;17962:7;17946:32;;17955:5;17946:32;;;17971:6;17946:32;;;;;;:::i;:::-;;;;;;;;17606:380;;;:::o;15845:399::-;15948:1;15929:21;;:7;:21;;;;15921:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;15999:49;16028:1;16032:7;16041:6;15999:20;:49::i;:::-;16077:6;16061:12;;:22;;;;;;;:::i;:::-;;;;;;;;16116:6;16094:9;:18;16104:7;16094:18;;;;;;;;;;;;;;;;:28;;;;;;;:::i;:::-;;;;;;;;16159:7;16138:37;;16155:1;16138:37;;;16168:6;16138:37;;;;;;:::i;:::-;;;;;;;;16188:48;16216:1;16220:7;16229:6;16188:19;:48::i;:::-;15845:399;;:::o;42367:5010::-;42515:1;42499:18;;:4;:18;;;;42491:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42592:1;42578:16;;:2;:16;;;;42570:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;42661:1;42651:6;:11;42647:93;;;42679:28;42695:4;42701:2;42705:1;42679:15;:28::i;:::-;42722:7;;42647:93;42756:14;;;;;;;;;;;42752:2487;;;42817:7;:5;:7::i;:::-;42809:15;;:4;:15;;;;:49;;;;;42851:7;:5;:7::i;:::-;42845:13;;:2;:13;;;;42809:49;:86;;;;;42893:1;42879:16;;:2;:16;;;;42809:86;:128;;;;;42930:6;42916:21;;:2;:21;;;;42809:128;:158;;;;;42959:8;;;;;;;;;;;42958:9;42809:158;42787:2441;;;43007:13;;;;;;;;;;;43002:223;;43079:19;:25;43099:4;43079:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;43108:19;:23;43128:2;43108:23;;;;;;;;;;;;;;;;;;;;;;;;;43079:52;43045:160;;;;;;;;;;;;:::i;:::-;;;;;;;;;43002:223;43381:20;;;;;;;;;;;43377:641;;;43462:7;:5;:7::i;:::-;43456:13;;:2;:13;;;;:72;;;;;43512:15;43498:30;;:2;:30;;;;43456:72;:129;;;;;43571:13;43557:28;;:2;:28;;;;43456:129;43426:573;;;43749:12;43674:28;:39;43703:9;43674:39;;;;;;;;;;;;;;;;:87;43636:258;;;;;;;;;;;;:::i;:::-;;;;;;;;;43963:12;43921:28;:39;43950:9;43921:39;;;;;;;;;;;;;;;:54;;;;43426:573;43377:641;44092:25;:31;44118:4;44092:31;;;;;;;;;;;;;;;;;;;;;;;;;:92;;;;;44149:31;:35;44181:2;44149:35;;;;;;;;;;;;;;;;;;;;;;;;;44148:36;44092:92;44066:1147;;;44271:20;;44261:6;:30;;44227:169;;;;;;;;;;;;:::i;:::-;;;;;;;;;44479:9;;44462:13;44472:2;44462:9;:13::i;:::-;44453:6;:22;;;;:::i;:::-;:35;;44419:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;44066:1147;;;44657:25;:29;44683:2;44657:29;;;;;;;;;;;;;;;;;;;;;;;;;:92;;;;;44712:31;:37;44744:4;44712:37;;;;;;;;;;;;;;;;;;;;;;;;;44711:38;44657:92;44631:582;;;44836:20;;44826:6;:30;;44792:170;;;;;;;;;;;;:::i;:::-;;;;;;;;;44631:582;;;44993:31;:35;45025:2;44993:35;;;;;;;;;;;;;;;;;;;;;;;;;44988:225;;45113:9;;45096:13;45106:2;45096:9;:13::i;:::-;45087:6;:22;;;;:::i;:::-;:35;;45053:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;44988:225;44631:582;44066:1147;42787:2441;42752:2487;45251:28;45282:24;45300:4;45282:9;:24::i;:::-;45251:55;;45319:12;45358:18;;45334:20;:42;;45319:57;;45407:7;:35;;;;;45431:11;;;;;;;;;;;45407:35;:61;;;;;45460:8;;;;;;;;;;;45459:9;45407:61;:110;;;;;45486:25;:31;45512:4;45486:31;;;;;;;;;;;;;;;;;;;;;;;;;45485:32;45407:110;:153;;;;;45535:19;:25;45555:4;45535:25;;;;;;;;;;;;;;;;;;;;;;;;;45534:26;45407:153;:194;;;;;45578:19;:23;45598:2;45578:23;;;;;;;;;;;;;;;;;;;;;;;;;45577:24;45407:194;45389:326;;;45639:4;45628:8;;:15;;;;;;;;;;;;;;;;;;45660:10;:8;:10::i;:::-;45698:5;45687:8;;:16;;;;;;;;;;;;;;;;;;45389:326;45746:8;;;;;;;;;;;45745:9;:55;;;;;45771:25;:29;45797:2;45771:29;;;;;;;;;;;;;;;;;;;;;;;;;45745:55;:85;;;;;45817:13;;;;;;;;;;;45745:85;:153;;;;;45883:15;;45866:14;;:32;;;;:::i;:::-;45847:15;:51;;45745:153;:196;;;;;45916:19;:25;45936:4;45916:25;;;;;;;;;;;;;;;;;;;;;;;;;45915:26;45745:196;45727:282;;;45968:29;:27;:29::i;:::-;;45727:282;46021:12;46037:8;;;;;;;;;;;46036:9;46021:24;;46147:19;:25;46167:4;46147:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;46176:19;:23;46196:2;46176:23;;;;;;;;;;;;;;;;;;;;;;;;;46147:52;46143:100;;;46226:5;46216:15;;46143:100;46255:12;46360:7;46356:968;;;46412:25;:29;46438:2;46412:29;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;;46461:1;46445:13;;:17;46412:50;46408:767;;;46490:34;46520:3;46490:25;46501:13;;46490:6;:10;;:25;;;;:::i;:::-;:29;;:34;;;;:::i;:::-;46483:41;;46587:13;;46570;;46563:4;:20;;;;:::i;:::-;46562:38;;;;:::i;:::-;46543:15;;:57;;;;;;;:::i;:::-;;;;;;;;46663:13;;46647:12;;46640:4;:19;;;;:::i;:::-;46639:37;;;;:::i;:::-;46619:16;;:57;;;;;;;:::i;:::-;;;;;;;;46745:13;;46725:16;;46718:4;:23;;;;:::i;:::-;46717:41;;;;:::i;:::-;46695:18;;:63;;;;;;;:::i;:::-;;;;;;;;46408:767;;;46820:25;:31;46846:4;46820:31;;;;;;;;;;;;;;;;;;;;;;;;;:51;;;;;46870:1;46855:12;;:16;46820:51;46816:359;;;46899:33;46928:3;46899:24;46910:12;;46899:6;:10;;:24;;;;:::i;:::-;:28;;:33;;;;:::i;:::-;46892:40;;46994:12;;46978;;46971:4;:19;;;;:::i;:::-;46970:36;;;;:::i;:::-;46951:15;;:55;;;;;;;:::i;:::-;;;;;;;;47067:12;;47053:10;;47046:4;:17;;;;:::i;:::-;47045:34;;;;:::i;:::-;47025:16;;:54;;;;;;;:::i;:::-;;;;;;;;47147:12;;47128:15;;47121:4;:22;;;;:::i;:::-;47120:39;;;;:::i;:::-;47098:18;;:61;;;;;;;:::i;:::-;;;;;;;;46816:359;46408:767;47202:1;47195:4;:8;47191:91;;;47224:42;47240:4;47254;47261;47224:15;:42::i;:::-;47191:91;47308:4;47298:14;;;;;:::i;:::-;;;46356:968;47336:33;47352:4;47358:2;47362:6;47336:15;:33::i;:::-;42480:4897;;;;42367:5010;;;;:::o;3339:191::-;3413:16;3432:6;;;;;;;;;;;3413:25;;3458:8;3449:6;;:17;;;;;;;;;;;;;;;;;;3513:8;3482:40;;3503:8;3482:40;;;;;;;;;;;;3402:128;3339:191;:::o;41358:188::-;41475:5;41441:25;:31;41467:4;41441:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;41532:5;41498:40;;41526:4;41498:40;;;;;;;;;;;;41358:188;;:::o;23059:98::-;23117:7;23148:1;23144;:5;;;;:::i;:::-;23137:12;;23059:98;;;;:::o;23458:::-;23516:7;23547:1;23543;:5;;;;:::i;:::-;23536:12;;23458:98;;;;:::o;14825:733::-;14983:1;14965:20;;:6;:20;;;;14957:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;15067:1;15046:23;;:9;:23;;;;15038:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;15122:47;15143:6;15151:9;15162:6;15122:20;:47::i;:::-;15182:21;15206:9;:17;15216:6;15206:17;;;;;;;;;;;;;;;;15182:41;;15259:6;15242:13;:23;;15234:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;15380:6;15364:13;:22;15344:9;:17;15354:6;15344:17;;;;;;;;;;;;;;;:42;;;;15432:6;15408:9;:20;15418:9;15408:20;;;;;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;15473:9;15456:35;;15465:6;15456:35;;;15484:6;15456:35;;;;;;:::i;:::-;;;;;;;;15504:46;15524:6;15532:9;15543:6;15504:19;:46::i;:::-;14946:612;14825:733;;;:::o;18586:125::-;;;;:::o;19315:124::-;;;;:::o;48507:1094::-;48546:25;48606:18;;48574:16;;:50;;;;:::i;:::-;48546:78;;48635:12;48692:1;48664:24;48682:4;48664:9;:24::i;:::-;:29;:55;;;;48718:1;48697:17;:22;48664:55;48660:94;;;48736:7;;;;48660:94;48764:64;48782:4;48796:14;;;;;;;;;;;48812:15;;48764:9;:64::i;:::-;48839:23;48865:24;48883:4;48865:9;:24::i;:::-;48839:50;;48945:2;48924:18;;:23;;;;:::i;:::-;48906:15;:41;48902:115;;;49003:2;48982:18;;:23;;;;:::i;:::-;48964:41;;48902:115;49078:25;49106:21;49078:49;;49140:33;49157:15;49140:16;:33::i;:::-;49186:18;49207:44;49233:17;49207:21;:25;;:44;;;;:::i;:::-;49186:65;;49264:21;49288:17;49303:1;49288:10;:14;;:17;;;;:::i;:::-;49264:41;;49337:1;49318:16;:20;;;;49370:1;49349:18;:22;;;;49400:1;49382:15;:19;;;;49436:13;;;;;;;;;;;49428:27;;49463:13;49428:53;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49414:67;;;;;49514:15;;;;;;;;;;;49506:29;;49557:21;49506:87;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49492:101;;;;;48535:1066;;;;;;48507:1094;:::o;50434:788::-;50491:4;50525:15;50508:14;:32;;;;50595:28;50626:4;:14;;;50641:13;50626:29;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;50595:60;;50705:20;50728:77;50789:5;50728:42;50753:16;;50728:20;:24;;:42;;;;:::i;:::-;:46;;:77;;;;:::i;:::-;50705:100;;50925:1;50910:12;:16;50906:110;;;50943:61;50959:13;50982:6;50991:12;50943:15;:61::i;:::-;50906:110;51091:19;51128:13;51091:51;;51153:4;:9;;;:11;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;51180:12;;;;;;;;;;51210:4;51203:11;;;;;50434:788;:::o;47385:589::-;47511:21;47549:1;47535:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47511:40;;47580:4;47562;47567:1;47562:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;47606:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;47596:4;47601:1;47596:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;47641:62;47658:4;47673:15;47691:11;47641:8;:62::i;:::-;47742:15;:66;;;47823:11;47849:1;47893:4;47920;47940:15;47742:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47440:534;47385:589;:::o;22702:98::-;22760:7;22791:1;22787;:5;;;;:::i;:::-;22780:12;;22702:98;;;;:::o;7:99:1:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:307::-;355:1;365:113;379:6;376:1;373:13;365:113;;;464:1;459:3;455:11;449:18;445:1;440:3;436:11;429:39;401:2;398:1;394:10;389:15;;365:113;;;496:6;493:1;490:13;487:101;;;576:1;567:6;562:3;558:16;551:27;487:101;336:258;287:307;;;:::o;600:102::-;641:6;692:2;688:7;683:2;676:5;672:14;668:28;658:38;;600:102;;;:::o;708:364::-;796:3;824:39;857:5;824:39;:::i;:::-;879:71;943:6;938:3;879:71;:::i;:::-;872:78;;959:52;1004:6;999:3;992:4;985:5;981:16;959:52;:::i;:::-;1036:29;1058:6;1036:29;:::i;:::-;1031:3;1027:39;1020:46;;800:272;708:364;;;;:::o;1078:313::-;1191:4;1229:2;1218:9;1214:18;1206:26;;1278:9;1272:4;1268:20;1264:1;1253:9;1249:17;1242:47;1306:78;1379:4;1370:6;1306:78;:::i;:::-;1298:86;;1078:313;;;;:::o;1478:117::-;1587:1;1584;1577:12;1724:126;1761:7;1801:42;1794:5;1790:54;1779:65;;1724:126;;;:::o;1856:96::-;1893:7;1922:24;1940:5;1922:24;:::i;:::-;1911:35;;1856:96;;;:::o;1958:122::-;2031:24;2049:5;2031:24;:::i;:::-;2024:5;2021:35;2011:63;;2070:1;2067;2060:12;2011:63;1958:122;:::o;2086:139::-;2132:5;2170:6;2157:20;2148:29;;2186:33;2213:5;2186:33;:::i;:::-;2086:139;;;;:::o;2231:77::-;2268:7;2297:5;2286:16;;2231:77;;;:::o;2314:122::-;2387:24;2405:5;2387:24;:::i;:::-;2380:5;2377:35;2367:63;;2426:1;2423;2416:12;2367:63;2314:122;:::o;2442:139::-;2488:5;2526:6;2513:20;2504:29;;2542:33;2569:5;2542:33;:::i;:::-;2442:139;;;;:::o;2587:474::-;2655:6;2663;2712:2;2700:9;2691:7;2687:23;2683:32;2680:119;;;2718:79;;:::i;:::-;2680:119;2838:1;2863:53;2908:7;2899:6;2888:9;2884:22;2863:53;:::i;:::-;2853:63;;2809:117;2965:2;2991:53;3036:7;3027:6;3016:9;3012:22;2991:53;:::i;:::-;2981:63;;2936:118;2587:474;;;;;:::o;3067:90::-;3101:7;3144:5;3137:13;3130:21;3119:32;;3067:90;;;:::o;3163:109::-;3244:21;3259:5;3244:21;:::i;:::-;3239:3;3232:34;3163:109;;:::o;3278:210::-;3365:4;3403:2;3392:9;3388:18;3380:26;;3416:65;3478:1;3467:9;3463:17;3454:6;3416:65;:::i;:::-;3278:210;;;;:::o;3494:118::-;3581:24;3599:5;3581:24;:::i;:::-;3576:3;3569:37;3494:118;;:::o;3618:222::-;3711:4;3749:2;3738:9;3734:18;3726:26;;3762:71;3830:1;3819:9;3815:17;3806:6;3762:71;:::i;:::-;3618:222;;;;:::o;3846:329::-;3905:6;3954:2;3942:9;3933:7;3929:23;3925:32;3922:119;;;3960:79;;:::i;:::-;3922:119;4080:1;4105:53;4150:7;4141:6;4130:9;4126:22;4105:53;:::i;:::-;4095:63;;4051:117;3846:329;;;;:::o;4181:::-;4240:6;4289:2;4277:9;4268:7;4264:23;4260:32;4257:119;;;4295:79;;:::i;:::-;4257:119;4415:1;4440:53;4485:7;4476:6;4465:9;4461:22;4440:53;:::i;:::-;4430:63;;4386:117;4181:329;;;;:::o;4516:60::-;4544:3;4565:5;4558:12;;4516:60;;;:::o;4582:142::-;4632:9;4665:53;4683:34;4692:24;4710:5;4692:24;:::i;:::-;4683:34;:::i;:::-;4665:53;:::i;:::-;4652:66;;4582:142;;;:::o;4730:126::-;4780:9;4813:37;4844:5;4813:37;:::i;:::-;4800:50;;4730:126;;;:::o;4862:153::-;4939:9;4972:37;5003:5;4972:37;:::i;:::-;4959:50;;4862:153;;;:::o;5021:185::-;5135:64;5193:5;5135:64;:::i;:::-;5130:3;5123:77;5021:185;;:::o;5212:276::-;5332:4;5370:2;5359:9;5355:18;5347:26;;5383:98;5478:1;5467:9;5463:17;5454:6;5383:98;:::i;:::-;5212:276;;;;:::o;5494:619::-;5571:6;5579;5587;5636:2;5624:9;5615:7;5611:23;5607:32;5604:119;;;5642:79;;:::i;:::-;5604:119;5762:1;5787:53;5832:7;5823:6;5812:9;5808:22;5787:53;:::i;:::-;5777:63;;5733:117;5889:2;5915:53;5960:7;5951:6;5940:9;5936:22;5915:53;:::i;:::-;5905:63;;5860:118;6017:2;6043:53;6088:7;6079:6;6068:9;6064:22;6043:53;:::i;:::-;6033:63;;5988:118;5494:619;;;;;:::o;6119:118::-;6206:24;6224:5;6206:24;:::i;:::-;6201:3;6194:37;6119:118;;:::o;6243:222::-;6336:4;6374:2;6363:9;6359:18;6351:26;;6387:71;6455:1;6444:9;6440:17;6431:6;6387:71;:::i;:::-;6243:222;;;;:::o;6471:86::-;6506:7;6546:4;6539:5;6535:16;6524:27;;6471:86;;;:::o;6563:112::-;6646:22;6662:5;6646:22;:::i;:::-;6641:3;6634:35;6563:112;;:::o;6681:214::-;6770:4;6808:2;6797:9;6793:18;6785:26;;6821:67;6885:1;6874:9;6870:17;6861:6;6821:67;:::i;:::-;6681:214;;;;:::o;6901:116::-;6971:21;6986:5;6971:21;:::i;:::-;6964:5;6961:32;6951:60;;7007:1;7004;6997:12;6951:60;6901:116;:::o;7023:133::-;7066:5;7104:6;7091:20;7082:29;;7120:30;7144:5;7120:30;:::i;:::-;7023:133;;;;:::o;7162:613::-;7236:6;7244;7252;7301:2;7289:9;7280:7;7276:23;7272:32;7269:119;;;7307:79;;:::i;:::-;7269:119;7427:1;7452:53;7497:7;7488:6;7477:9;7473:22;7452:53;:::i;:::-;7442:63;;7398:117;7554:2;7580:53;7625:7;7616:6;7605:9;7601:22;7580:53;:::i;:::-;7570:63;;7525:118;7682:2;7708:50;7750:7;7741:6;7730:9;7726:22;7708:50;:::i;:::-;7698:60;;7653:115;7162:613;;;;;:::o;7781:468::-;7846:6;7854;7903:2;7891:9;7882:7;7878:23;7874:32;7871:119;;;7909:79;;:::i;:::-;7871:119;8029:1;8054:53;8099:7;8090:6;8079:9;8075:22;8054:53;:::i;:::-;8044:63;;8000:117;8156:2;8182:50;8224:7;8215:6;8204:9;8200:22;8182:50;:::i;:::-;8172:60;;8127:115;7781:468;;;;;:::o;8255:619::-;8332:6;8340;8348;8397:2;8385:9;8376:7;8372:23;8368:32;8365:119;;;8403:79;;:::i;:::-;8365:119;8523:1;8548:53;8593:7;8584:6;8573:9;8569:22;8548:53;:::i;:::-;8538:63;;8494:117;8650:2;8676:53;8721:7;8712:6;8701:9;8697:22;8676:53;:::i;:::-;8666:63;;8621:118;8778:2;8804:53;8849:7;8840:6;8829:9;8825:22;8804:53;:::i;:::-;8794:63;;8749:118;8255:619;;;;;:::o;8880:323::-;8936:6;8985:2;8973:9;8964:7;8960:23;8956:32;8953:119;;;8991:79;;:::i;:::-;8953:119;9111:1;9136:50;9178:7;9169:6;9158:9;9154:22;9136:50;:::i;:::-;9126:60;;9082:114;8880:323;;;;:::o;9209:474::-;9277:6;9285;9334:2;9322:9;9313:7;9309:23;9305:32;9302:119;;;9340:79;;:::i;:::-;9302:119;9460:1;9485:53;9530:7;9521:6;9510:9;9506:22;9485:53;:::i;:::-;9475:63;;9431:117;9587:2;9613:53;9658:7;9649:6;9638:9;9634:22;9613:53;:::i;:::-;9603:63;;9558:118;9209:474;;;;;:::o;9689:180::-;9737:77;9734:1;9727:88;9834:4;9831:1;9824:15;9858:4;9855:1;9848:15;9875:320;9919:6;9956:1;9950:4;9946:12;9936:22;;10003:1;9997:4;9993:12;10024:18;10014:81;;10080:4;10072:6;10068:17;10058:27;;10014:81;10142:2;10134:6;10131:14;10111:18;10108:38;10105:84;;;10161:18;;:::i;:::-;10105:84;9926:269;9875:320;;;:::o;10201:238::-;10341:34;10337:1;10329:6;10325:14;10318:58;10410:21;10405:2;10397:6;10393:15;10386:46;10201:238;:::o;10445:366::-;10587:3;10608:67;10672:2;10667:3;10608:67;:::i;:::-;10601:74;;10684:93;10773:3;10684:93;:::i;:::-;10802:2;10797:3;10793:12;10786:19;;10445:366;;;:::o;10817:419::-;10983:4;11021:2;11010:9;11006:18;10998:26;;11070:9;11064:4;11060:20;11056:1;11045:9;11041:17;11034:47;11098:131;11224:4;11098:131;:::i;:::-;11090:139;;10817:419;;;:::o;11242:182::-;11382:34;11378:1;11370:6;11366:14;11359:58;11242:182;:::o;11430:366::-;11572:3;11593:67;11657:2;11652:3;11593:67;:::i;:::-;11586:74;;11669:93;11758:3;11669:93;:::i;:::-;11787:2;11782:3;11778:12;11771:19;;11430:366;;;:::o;11802:419::-;11968:4;12006:2;11995:9;11991:18;11983:26;;12055:9;12049:4;12045:20;12041:1;12030:9;12026:17;12019:47;12083:131;12209:4;12083:131;:::i;:::-;12075:139;;11802:419;;;:::o;12227:180::-;12275:77;12272:1;12265:88;12372:4;12369:1;12362:15;12396:4;12393:1;12386:15;12413:348;12453:7;12476:20;12494:1;12476:20;:::i;:::-;12471:25;;12510:20;12528:1;12510:20;:::i;:::-;12505:25;;12698:1;12630:66;12626:74;12623:1;12620:81;12615:1;12608:9;12601:17;12597:105;12594:131;;;12705:18;;:::i;:::-;12594:131;12753:1;12750;12746:9;12735:20;;12413:348;;;;:::o;12767:180::-;12815:77;12812:1;12805:88;12912:4;12909:1;12902:15;12936:4;12933:1;12926:15;12953:185;12993:1;13010:20;13028:1;13010:20;:::i;:::-;13005:25;;13044:20;13062:1;13044:20;:::i;:::-;13039:25;;13083:1;13073:35;;13088:18;;:::i;:::-;13073:35;13130:1;13127;13123:9;13118:14;;12953:185;;;;:::o;13144:234::-;13284:34;13280:1;13272:6;13268:14;13261:58;13353:17;13348:2;13340:6;13336:15;13329:42;13144:234;:::o;13384:366::-;13526:3;13547:67;13611:2;13606:3;13547:67;:::i;:::-;13540:74;;13623:93;13712:3;13623:93;:::i;:::-;13741:2;13736:3;13732:12;13725:19;;13384:366;;;:::o;13756:419::-;13922:4;13960:2;13949:9;13945:18;13937:26;;14009:9;14003:4;13999:20;13995:1;13984:9;13980:17;13973:47;14037:131;14163:4;14037:131;:::i;:::-;14029:139;;13756:419;;;:::o;14181:227::-;14321:34;14317:1;14309:6;14305:14;14298:58;14390:10;14385:2;14377:6;14373:15;14366:35;14181:227;:::o;14414:366::-;14556:3;14577:67;14641:2;14636:3;14577:67;:::i;:::-;14570:74;;14653:93;14742:3;14653:93;:::i;:::-;14771:2;14766:3;14762:12;14755:19;;14414:366;;;:::o;14786:419::-;14952:4;14990:2;14979:9;14975:18;14967:26;;15039:9;15033:4;15029:20;15025:1;15014:9;15010:17;15003:47;15067:131;15193:4;15067:131;:::i;:::-;15059:139;;14786:419;;;:::o;15211:305::-;15251:3;15270:20;15288:1;15270:20;:::i;:::-;15265:25;;15304:20;15322:1;15304:20;:::i;:::-;15299:25;;15458:1;15390:66;15386:74;15383:1;15380:81;15377:107;;;15464:18;;:::i;:::-;15377:107;15508:1;15505;15501:9;15494:16;;15211:305;;;;:::o;15522:238::-;15662:34;15658:1;15650:6;15646:14;15639:58;15731:21;15726:2;15718:6;15714:15;15707:46;15522:238;:::o;15766:366::-;15908:3;15929:67;15993:2;15988:3;15929:67;:::i;:::-;15922:74;;16005:93;16094:3;16005:93;:::i;:::-;16123:2;16118:3;16114:12;16107:19;;15766:366;;;:::o;16138:419::-;16304:4;16342:2;16331:9;16327:18;16319:26;;16391:9;16385:4;16381:20;16377:1;16366:9;16362:17;16355:47;16419:131;16545:4;16419:131;:::i;:::-;16411:139;;16138:419;;;:::o;16563:235::-;16703:34;16699:1;16691:6;16687:14;16680:58;16772:18;16767:2;16759:6;16755:15;16748:43;16563:235;:::o;16804:366::-;16946:3;16967:67;17031:2;17026:3;16967:67;:::i;:::-;16960:74;;17043:93;17132:3;17043:93;:::i;:::-;17161:2;17156:3;17152:12;17145:19;;16804:366;;;:::o;17176:419::-;17342:4;17380:2;17369:9;17365:18;17357:26;;17429:9;17423:4;17419:20;17415:1;17404:9;17400:17;17393:47;17457:131;17583:4;17457:131;:::i;:::-;17449:139;;17176:419;;;:::o;17601:179::-;17741:31;17737:1;17729:6;17725:14;17718:55;17601:179;:::o;17786:366::-;17928:3;17949:67;18013:2;18008:3;17949:67;:::i;:::-;17942:74;;18025:93;18114:3;18025:93;:::i;:::-;18143:2;18138:3;18134:12;18127:19;;17786:366;;;:::o;18158:419::-;18324:4;18362:2;18351:9;18347:18;18339:26;;18411:9;18405:4;18401:20;18397:1;18386:9;18382:17;18375:47;18439:131;18565:4;18439:131;:::i;:::-;18431:139;;18158:419;;;:::o;18583:244::-;18723:34;18719:1;18711:6;18707:14;18700:58;18792:27;18787:2;18779:6;18775:15;18768:52;18583:244;:::o;18833:366::-;18975:3;18996:67;19060:2;19055:3;18996:67;:::i;:::-;18989:74;;19072:93;19161:3;19072:93;:::i;:::-;19190:2;19185:3;19181:12;19174:19;;18833:366;;;:::o;19205:419::-;19371:4;19409:2;19398:9;19394:18;19386:26;;19458:9;19452:4;19448:20;19444:1;19433:9;19429:17;19422:47;19486:131;19612:4;19486:131;:::i;:::-;19478:139;;19205:419;;;:::o;19630:224::-;19770:34;19766:1;19758:6;19754:14;19747:58;19839:7;19834:2;19826:6;19822:15;19815:32;19630:224;:::o;19860:366::-;20002:3;20023:67;20087:2;20082:3;20023:67;:::i;:::-;20016:74;;20099:93;20188:3;20099:93;:::i;:::-;20217:2;20212:3;20208:12;20201:19;;19860:366;;;:::o;20232:419::-;20398:4;20436:2;20425:9;20421:18;20413:26;;20485:9;20479:4;20475:20;20471:1;20460:9;20456:17;20449:47;20513:131;20639:4;20513:131;:::i;:::-;20505:139;;20232:419;;;:::o;20657:223::-;20797:34;20793:1;20785:6;20781:14;20774:58;20866:6;20861:2;20853:6;20849:15;20842:31;20657:223;:::o;20886:366::-;21028:3;21049:67;21113:2;21108:3;21049:67;:::i;:::-;21042:74;;21125:93;21214:3;21125:93;:::i;:::-;21243:2;21238:3;21234:12;21227:19;;20886:366;;;:::o;21258:419::-;21424:4;21462:2;21451:9;21447:18;21439:26;;21511:9;21505:4;21501:20;21497:1;21486:9;21482:17;21475:47;21539:131;21665:4;21539:131;:::i;:::-;21531:139;;21258:419;;;:::o;21683:240::-;21823:34;21819:1;21811:6;21807:14;21800:58;21892:23;21887:2;21879:6;21875:15;21868:48;21683:240;:::o;21929:366::-;22071:3;22092:67;22156:2;22151:3;22092:67;:::i;:::-;22085:74;;22168:93;22257:3;22168:93;:::i;:::-;22286:2;22281:3;22277:12;22270:19;;21929:366;;;:::o;22301:419::-;22467:4;22505:2;22494:9;22490:18;22482:26;;22554:9;22548:4;22544:20;22540:1;22529:9;22525:17;22518:47;22582:131;22708:4;22582:131;:::i;:::-;22574:139;;22301:419;;;:::o;22726:239::-;22866:34;22862:1;22854:6;22850:14;22843:58;22935:22;22930:2;22922:6;22918:15;22911:47;22726:239;:::o;22971:366::-;23113:3;23134:67;23198:2;23193:3;23134:67;:::i;:::-;23127:74;;23210:93;23299:3;23210:93;:::i;:::-;23328:2;23323:3;23319:12;23312:19;;22971:366;;;:::o;23343:419::-;23509:4;23547:2;23536:9;23532:18;23524:26;;23596:9;23590:4;23586:20;23582:1;23571:9;23567:17;23560:47;23624:131;23750:4;23624:131;:::i;:::-;23616:139;;23343:419;;;:::o;23768:225::-;23908:34;23904:1;23896:6;23892:14;23885:58;23977:8;23972:2;23964:6;23960:15;23953:33;23768:225;:::o;23999:366::-;24141:3;24162:67;24226:2;24221:3;24162:67;:::i;:::-;24155:74;;24238:93;24327:3;24238:93;:::i;:::-;24356:2;24351:3;24347:12;24340:19;;23999:366;;;:::o;24371:419::-;24537:4;24575:2;24564:9;24560:18;24552:26;;24624:9;24618:4;24614:20;24610:1;24599:9;24595:17;24588:47;24652:131;24778:4;24652:131;:::i;:::-;24644:139;;24371:419;;;:::o;24796:182::-;24936:34;24932:1;24924:6;24920:14;24913:58;24796:182;:::o;24984:366::-;25126:3;25147:67;25211:2;25206:3;25147:67;:::i;:::-;25140:74;;25223:93;25312:3;25223:93;:::i;:::-;25341:2;25336:3;25332:12;25325:19;;24984:366;;;:::o;25356:419::-;25522:4;25560:2;25549:9;25545:18;25537:26;;25609:9;25603:4;25599:20;25595:1;25584:9;25580:17;25573:47;25637:131;25763:4;25637:131;:::i;:::-;25629:139;;25356:419;;;:::o;25781:229::-;25921:34;25917:1;25909:6;25905:14;25898:58;25990:12;25985:2;25977:6;25973:15;25966:37;25781:229;:::o;26016:366::-;26158:3;26179:67;26243:2;26238:3;26179:67;:::i;:::-;26172:74;;26255:93;26344:3;26255:93;:::i;:::-;26373:2;26368:3;26364:12;26357:19;;26016:366;;;:::o;26388:419::-;26554:4;26592:2;26581:9;26577:18;26569:26;;26641:9;26635:4;26631:20;26627:1;26616:9;26612:17;26605:47;26669:131;26795:4;26669:131;:::i;:::-;26661:139;;26388:419;;;:::o;26813:143::-;26870:5;26901:6;26895:13;26886:22;;26917:33;26944:5;26917:33;:::i;:::-;26813:143;;;;:::o;26962:351::-;27032:6;27081:2;27069:9;27060:7;27056:23;27052:32;27049:119;;;27087:79;;:::i;:::-;27049:119;27207:1;27232:64;27288:7;27279:6;27268:9;27264:22;27232:64;:::i;:::-;27222:74;;27178:128;26962:351;;;;:::o;27319:223::-;27459:34;27455:1;27447:6;27443:14;27436:58;27528:6;27523:2;27515:6;27511:15;27504:31;27319:223;:::o;27548:366::-;27690:3;27711:67;27775:2;27770:3;27711:67;:::i;:::-;27704:74;;27787:93;27876:3;27787:93;:::i;:::-;27905:2;27900:3;27896:12;27889:19;;27548:366;;;:::o;27920:419::-;28086:4;28124:2;28113:9;28109:18;28101:26;;28173:9;28167:4;28163:20;28159:1;28148:9;28144:17;28137:47;28201:131;28327:4;28201:131;:::i;:::-;28193:139;;27920:419;;;:::o;28345:221::-;28485:34;28481:1;28473:6;28469:14;28462:58;28554:4;28549:2;28541:6;28537:15;28530:29;28345:221;:::o;28572:366::-;28714:3;28735:67;28799:2;28794:3;28735:67;:::i;:::-;28728:74;;28811:93;28900:3;28811:93;:::i;:::-;28929:2;28924:3;28920:12;28913:19;;28572:366;;;:::o;28944:419::-;29110:4;29148:2;29137:9;29133:18;29125:26;;29197:9;29191:4;29187:20;29183:1;29172:9;29168:17;29161:47;29225:131;29351:4;29225:131;:::i;:::-;29217:139;;28944:419;;;:::o;29369:181::-;29509:33;29505:1;29497:6;29493:14;29486:57;29369:181;:::o;29556:366::-;29698:3;29719:67;29783:2;29778:3;29719:67;:::i;:::-;29712:74;;29795:93;29884:3;29795:93;:::i;:::-;29913:2;29908:3;29904:12;29897:19;;29556:366;;;:::o;29928:419::-;30094:4;30132:2;30121:9;30117:18;30109:26;;30181:9;30175:4;30171:20;30167:1;30156:9;30152:17;30145:47;30209:131;30335:4;30209:131;:::i;:::-;30201:139;;29928:419;;;:::o;30353:224::-;30493:34;30489:1;30481:6;30477:14;30470:58;30562:7;30557:2;30549:6;30545:15;30538:32;30353:224;:::o;30583:366::-;30725:3;30746:67;30810:2;30805:3;30746:67;:::i;:::-;30739:74;;30822:93;30911:3;30822:93;:::i;:::-;30940:2;30935:3;30931:12;30924:19;;30583:366;;;:::o;30955:419::-;31121:4;31159:2;31148:9;31144:18;31136:26;;31208:9;31202:4;31198:20;31194:1;31183:9;31179:17;31172:47;31236:131;31362:4;31236:131;:::i;:::-;31228:139;;30955:419;;;:::o;31380:222::-;31520:34;31516:1;31508:6;31504:14;31497:58;31589:5;31584:2;31576:6;31572:15;31565:30;31380:222;:::o;31608:366::-;31750:3;31771:67;31835:2;31830:3;31771:67;:::i;:::-;31764:74;;31847:93;31936:3;31847:93;:::i;:::-;31965:2;31960:3;31956:12;31949:19;;31608:366;;;:::o;31980:419::-;32146:4;32184:2;32173:9;32169:18;32161:26;;32233:9;32227:4;32223:20;32219:1;32208:9;32204:17;32197:47;32261:131;32387:4;32261:131;:::i;:::-;32253:139;;31980:419;;;:::o;32405:172::-;32545:24;32541:1;32533:6;32529:14;32522:48;32405:172;:::o;32583:366::-;32725:3;32746:67;32810:2;32805:3;32746:67;:::i;:::-;32739:74;;32822:93;32911:3;32822:93;:::i;:::-;32940:2;32935:3;32931:12;32924:19;;32583:366;;;:::o;32955:419::-;33121:4;33159:2;33148:9;33144:18;33136:26;;33208:9;33202:4;33198:20;33194:1;33183:9;33179:17;33172:47;33236:131;33362:4;33236:131;:::i;:::-;33228:139;;32955:419;;;:::o;33380:297::-;33520:34;33516:1;33508:6;33504:14;33497:58;33589:34;33584:2;33576:6;33572:15;33565:59;33658:11;33653:2;33645:6;33641:15;33634:36;33380:297;:::o;33683:366::-;33825:3;33846:67;33910:2;33905:3;33846:67;:::i;:::-;33839:74;;33922:93;34011:3;33922:93;:::i;:::-;34040:2;34035:3;34031:12;34024:19;;33683:366;;;:::o;34055:419::-;34221:4;34259:2;34248:9;34244:18;34236:26;;34308:9;34302:4;34298:20;34294:1;34283:9;34279:17;34272:47;34336:131;34462:4;34336:131;:::i;:::-;34328:139;;34055:419;;;:::o;34480:240::-;34620:34;34616:1;34608:6;34604:14;34597:58;34689:23;34684:2;34676:6;34672:15;34665:48;34480:240;:::o;34726:366::-;34868:3;34889:67;34953:2;34948:3;34889:67;:::i;:::-;34882:74;;34965:93;35054:3;34965:93;:::i;:::-;35083:2;35078:3;35074:12;35067:19;;34726:366;;;:::o;35098:419::-;35264:4;35302:2;35291:9;35287:18;35279:26;;35351:9;35345:4;35341:20;35337:1;35326:9;35322:17;35315:47;35379:131;35505:4;35379:131;:::i;:::-;35371:139;;35098:419;;;:::o;35523:169::-;35663:21;35659:1;35651:6;35647:14;35640:45;35523:169;:::o;35698:366::-;35840:3;35861:67;35925:2;35920:3;35861:67;:::i;:::-;35854:74;;35937:93;36026:3;35937:93;:::i;:::-;36055:2;36050:3;36046:12;36039:19;;35698:366;;;:::o;36070:419::-;36236:4;36274:2;36263:9;36259:18;36251:26;;36323:9;36317:4;36313:20;36309:1;36298:9;36294:17;36287:47;36351:131;36477:4;36351:131;:::i;:::-;36343:139;;36070:419;;;:::o;36495:241::-;36635:34;36631:1;36623:6;36619:14;36612:58;36704:24;36699:2;36691:6;36687:15;36680:49;36495:241;:::o;36742:366::-;36884:3;36905:67;36969:2;36964:3;36905:67;:::i;:::-;36898:74;;36981:93;37070:3;36981:93;:::i;:::-;37099:2;37094:3;37090:12;37083:19;;36742:366;;;:::o;37114:419::-;37280:4;37318:2;37307:9;37303:18;37295:26;;37367:9;37361:4;37357:20;37353:1;37342:9;37338:17;37331:47;37395:131;37521:4;37395:131;:::i;:::-;37387:139;;37114:419;;;:::o;37539:191::-;37579:4;37599:20;37617:1;37599:20;:::i;:::-;37594:25;;37633:20;37651:1;37633:20;:::i;:::-;37628:25;;37672:1;37669;37666:8;37663:34;;;37677:18;;:::i;:::-;37663:34;37722:1;37719;37715:9;37707:17;;37539:191;;;;:::o;37736:225::-;37876:34;37872:1;37864:6;37860:14;37853:58;37945:8;37940:2;37932:6;37928:15;37921:33;37736:225;:::o;37967:366::-;38109:3;38130:67;38194:2;38189:3;38130:67;:::i;:::-;38123:74;;38206:93;38295:3;38206:93;:::i;:::-;38324:2;38319:3;38315:12;38308:19;;37967:366;;;:::o;38339:419::-;38505:4;38543:2;38532:9;38528:18;38520:26;;38592:9;38586:4;38582:20;38578:1;38567:9;38563:17;38556:47;38620:131;38746:4;38620:131;:::i;:::-;38612:139;;38339:419;;;:::o;38764:147::-;38865:11;38902:3;38887:18;;38764:147;;;;:::o;38917:114::-;;:::o;39037:398::-;39196:3;39217:83;39298:1;39293:3;39217:83;:::i;:::-;39210:90;;39309:93;39398:3;39309:93;:::i;:::-;39427:1;39422:3;39418:11;39411:18;;39037:398;;;:::o;39441:379::-;39625:3;39647:147;39790:3;39647:147;:::i;:::-;39640:154;;39811:3;39804:10;;39441:379;;;:::o;39826:180::-;39874:77;39871:1;39864:88;39971:4;39968:1;39961:15;39995:4;39992:1;39985:15;40012:180;40060:77;40057:1;40050:88;40157:4;40154:1;40147:15;40181:4;40178:1;40171:15;40198:143;40255:5;40286:6;40280:13;40271:22;;40302:33;40329:5;40302:33;:::i;:::-;40198:143;;;;:::o;40347:351::-;40417:6;40466:2;40454:9;40445:7;40441:23;40437:32;40434:119;;;40472:79;;:::i;:::-;40434:119;40592:1;40617:64;40673:7;40664:6;40653:9;40649:22;40617:64;:::i;:::-;40607:74;;40563:128;40347:351;;;;:::o;40704:85::-;40749:7;40778:5;40767:16;;40704:85;;;:::o;40795:158::-;40853:9;40886:61;40904:42;40913:32;40939:5;40913:32;:::i;:::-;40904:42;:::i;:::-;40886:61;:::i;:::-;40873:74;;40795:158;;;:::o;40959:147::-;41054:45;41093:5;41054:45;:::i;:::-;41049:3;41042:58;40959:147;;:::o;41112:114::-;41179:6;41213:5;41207:12;41197:22;;41112:114;;;:::o;41232:184::-;41331:11;41365:6;41360:3;41353:19;41405:4;41400:3;41396:14;41381:29;;41232:184;;;;:::o;41422:132::-;41489:4;41512:3;41504:11;;41542:4;41537:3;41533:14;41525:22;;41422:132;;;:::o;41560:108::-;41637:24;41655:5;41637:24;:::i;:::-;41632:3;41625:37;41560:108;;:::o;41674:179::-;41743:10;41764:46;41806:3;41798:6;41764:46;:::i;:::-;41842:4;41837:3;41833:14;41819:28;;41674:179;;;;:::o;41859:113::-;41929:4;41961;41956:3;41952:14;41944:22;;41859:113;;;:::o;42008:732::-;42127:3;42156:54;42204:5;42156:54;:::i;:::-;42226:86;42305:6;42300:3;42226:86;:::i;:::-;42219:93;;42336:56;42386:5;42336:56;:::i;:::-;42415:7;42446:1;42431:284;42456:6;42453:1;42450:13;42431:284;;;42532:6;42526:13;42559:63;42618:3;42603:13;42559:63;:::i;:::-;42552:70;;42645:60;42698:6;42645:60;:::i;:::-;42635:70;;42491:224;42478:1;42475;42471:9;42466:14;;42431:284;;;42435:14;42731:3;42724:10;;42132:608;;;42008:732;;;;:::o;42746:831::-;43009:4;43047:3;43036:9;43032:19;43024:27;;43061:71;43129:1;43118:9;43114:17;43105:6;43061:71;:::i;:::-;43142:80;43218:2;43207:9;43203:18;43194:6;43142:80;:::i;:::-;43269:9;43263:4;43259:20;43254:2;43243:9;43239:18;43232:48;43297:108;43400:4;43391:6;43297:108;:::i;:::-;43289:116;;43415:72;43483:2;43472:9;43468:18;43459:6;43415:72;:::i;:::-;43497:73;43565:3;43554:9;43550:19;43541:6;43497:73;:::i;:::-;42746:831;;;;;;;;:::o

Swarm Source

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