ETH Price: $3,487.36 (+3.60%)
Gas: 2 Gwei

Token

Wager (VS)
 

Overview

Max Total Supply

100,000,000,000 VS

Holders

492

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
0 VS

Value
$0.00
0x76bb7a550c05ae1dcda72dc0d21762db794d301f
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:
Wager

Compiler Version
v0.8.21+commit.d9974bed

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

/**
 * SPDX-License-Identifier: MIT
 */
pragma solidity 0.8.21;

library SafeMath {
    /**
     * @dev Returns the addition of two unsigned integers, with an overflow flag.
     *
     * _Available since v3.4._
     */
    function tryAdd(
        uint256 a,
        uint256 b
    ) internal pure returns (bool, uint256) {
        unchecked {
            uint256 c = a + b;
            if (c < a) return (false, 0);
            return (true, c);
        }
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

interface IERC20Errors {
    /**
     * @dev Indicates an error related to the current `balance` of a `sender`. Used in transfers.
     * @param sender Address whose tokens are being transferred.
     * @param balance Current balance for the interacting account.
     * @param needed Minimum amount required to perform a transfer.
     */
    error ERC20InsufficientBalance(address sender, uint256 balance, uint256 needed);

    /**
     * @dev Indicates a failure with the token `sender`. Used in transfers.
     * @param sender Address whose tokens are being transferred.
     */
    error ERC20InvalidSender(address sender);

    /**
     * @dev Indicates a failure with the token `receiver`. Used in transfers.
     * @param receiver Address to which tokens are being transferred.
     */
    error ERC20InvalidReceiver(address receiver);

    /**
     * @dev Indicates a failure with the `spender`’s `allowance`. Used in transfers.
     * @param spender Address that may be allowed to operate on tokens without being their owner.
     * @param allowance Amount of tokens a `spender` is allowed to operate with.
     * @param needed Minimum amount required to perform a transfer.
     */
    error ERC20InsufficientAllowance(address spender, uint256 allowance, uint256 needed);

    /**
     * @dev Indicates a failure with the `approver` of a token to be approved. Used in approvals.
     * @param approver Address initiating an approval operation.
     */
    error ERC20InvalidApprover(address approver);

    /**
     * @dev Indicates a failure with the `spender` to be approved. Used in approvals.
     * @param spender Address that may be allowed to operate on tokens without being their owner.
     */
    error ERC20InvalidSpender(address spender);
}

abstract contract ERC20 is Context, IERC20, IERC20Metadata, IERC20Errors {
    mapping(address account => uint256) private _balances;

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

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

    /**
     * @dev Indicates a failed `decreaseAllowance` request.
     */
    error ERC20FailedDecreaseAllowance(address spender, uint256 currentAllowance, uint256 requestedDecrease);

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

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

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

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

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

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

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

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

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

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

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

    /**
     * @dev Atomically decreases the allowance granted to `spender` by the caller.
     *
     * This is an alternative to {approve} that can be used as a mitigation for
     * problems described in {IERC20-approve}.
     *
     * Emits an {Approval} event indicating the updated allowance.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     * - `spender` must have allowance for the caller of at least
     * `requestedDecrease`.
     *
     * NOTE: Although this function is designed to avoid double spending with {approval},
     * it can still be frontrunned, preventing any attempt of allowance reduction.
     */
    function decreaseAllowance(address spender, uint256 requestedDecrease) public virtual returns (bool) {
        address owner = _msgSender();
        uint256 currentAllowance = allowance(owner, spender);
        if (currentAllowance < requestedDecrease) {
            revert ERC20FailedDecreaseAllowance(spender, currentAllowance, requestedDecrease);
        }
        unchecked {
            _approve(owner, spender, currentAllowance - requestedDecrease);
        }

        return true;
    }

    /**
     * @dev Moves a `value` amount of tokens from `from` to `to`.
     *
     * This internal function is equivalent to {transfer}, and can be used to
     * e.g. implement automatic token fees, slashing mechanisms, etc.
     *
     * Emits a {Transfer} event.
     *
     * NOTE: This function is not virtual, {_update} should be overridden instead.
     */
    function _transfer(address from, address to, uint256 value) internal {
        if (from == address(0)) {
            revert ERC20InvalidSender(address(0));
        }
        if (to == address(0)) {
            revert ERC20InvalidReceiver(address(0));
        }
        _update(from, to, value);
    }

    /**
     * @dev Transfers a `value` amount of tokens from `from` to `to`, or alternatively mints (or burns) if `from` (or `to`) is
     * the zero address. All customizations to transfers, mints, and burns should be done by overriding this function.
     *
     * Emits a {Transfer} event.
     */
    function _update(address from, address to, uint256 value) internal virtual {
        if (from == address(0)) {
            // Overflow check required: The rest of the code assumes that totalSupply never overflows
            _totalSupply += value;
        } else {
            uint256 fromBalance = _balances[from];
            if (fromBalance < value) {
                revert ERC20InsufficientBalance(from, fromBalance, value);
            }
            unchecked {
                // Overflow not possible: value <= fromBalance <= totalSupply.
                _balances[from] = fromBalance - value;
            }
        }

        if (to == address(0)) {
            unchecked {
                // Overflow not possible: value <= totalSupply or value <= fromBalance <= totalSupply.
                _totalSupply -= value;
            }
        } else {
            unchecked {
                // Overflow not possible: balance + value is at most totalSupply, which we know fits into a uint256.
                _balances[to] += value;
            }
        }

        emit Transfer(from, to, value);
    }

    /**
     * @dev Creates a `value` amount of tokens and assigns them to `account`, by transferring it from address(0).
     * Relies on the `_update` mechanism
     *
     * Emits a {Transfer} event with `from` set to the zero address.
     *
     * NOTE: This function is not virtual, {_update} should be overridden instead.
     */
    function _mint(address account, uint256 value) internal {
        if (account == address(0)) {
            revert ERC20InvalidReceiver(address(0));
        }
        _update(address(0), account, value);
    }

    /**
     * @dev Destroys a `value` amount of tokens from `account`, by transferring it to address(0).
     * Relies on the `_update` mechanism.
     *
     * Emits a {Transfer} event with `to` set to the zero address.
     *
     * NOTE: This function is not virtual, {_update} should be overridden instead
     */
    function _burn(address account, uint256 value) internal {
        if (account == address(0)) {
            revert ERC20InvalidSender(address(0));
        }
        _update(account, address(0), value);
    }

    /**
     * @dev Sets `value` 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 value) internal virtual {
        _approve(owner, spender, value, true);
    }

    /**
     * @dev Alternative version of {_approve} with an optional flag that can enable or disable the Approval event.
     *
     * By default (when calling {_approve}) the flag is set to true. On the other hand, approval changes made by
     * `_spendAllowance` during the `transferFrom` operation set the flag to false. This saves gas by not emitting any
     * `Approval` event during `transferFrom` operations.
     *
     * Anyone who wishes to continue emitting `Approval` events on the`transferFrom` operation can force the flag to true
     * using the following override:
     * ```
     * function _approve(address owner, address spender, uint256 value, bool) internal virtual override {
     *     super._approve(owner, spender, value, true);
     * }
     * ```
     *
     * Requirements are the same as {_approve}.
     */
    function _approve(address owner, address spender, uint256 value, bool emitEvent) internal virtual {
        if (owner == address(0)) {
            revert ERC20InvalidApprover(address(0));
        }
        if (spender == address(0)) {
            revert ERC20InvalidSpender(address(0));
        }
        _allowances[owner][spender] = value;
        if (emitEvent) {
            emit Approval(owner, spender, value);
        }
    }

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

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

interface IDexFactory {
    function createPair(
        address tokenA,
        address tokenB
    ) external returns (address pair);
}

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

    function WETH() external pure returns (address);

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

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

    IDexRouter public immutable dexRouter;
    address public immutable dexPair;

    // Swapback
    bool private duringContractSell;
    bool public contractSellEnabled = false;
    uint256 public minBalanceForContractSell;
    uint256 public maxAmountTokensForContractSell;

    //Anti-whale
    bool public tradingLimitsOn = true;
    bool public limitTxsPerBlock = true;
    uint256 public maxHold;
    uint256 public maxTx;
    mapping(address => uint256) private _addressLastTransfer; // to hold last Transfers temporarily during launch

    // Blacklist
    mapping(address => bool) public blacklisted;
    bool public canSetBlacklist = true;

    // Fee receivers
    address public treasuryWallet;
    address public projectWallet;

    bool public tokenLaunched = false;

    uint256 public buyFeesTotal;
    uint256 public treasuryFeeBuy;
    uint256 public projectFeeBuy;

    uint256 public sellFeesTotal;
    uint256 public treasuryFeeSell;
    uint256 public projectFeeSell;

    uint256 public tokensToSwapTreasury;
    uint256 public tokensToSwapProject;

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

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

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

    event FeeWhitelist(address indexed account, bool isExcluded);

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

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

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

    constructor() ERC20("Wager", "VS") {
        IDexRouter _dexRouter = IDexRouter(
            0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D
        );

        txLimitsWhitelist(address(_dexRouter), true);
        dexRouter = _dexRouter;

        dexPair = IDexFactory(_dexRouter.factory())
            .createPair(address(this), _dexRouter.WETH());
        txLimitsWhitelist(address(dexPair), true);
        _setAutomatedMarketMakerPair(address(dexPair), true);

        uint256 _treasuryFeeBuy = 1;
        uint256 _projectFeeBuy = 15;

        uint256 _treasuryFeeSell = 1;
        uint256 _projectFeeSell = 20;

        uint256 tokenSupply = 100000000000 * 1e18;

        maxTx = (tokenSupply * 10) / 1000; // 1% of total supply
        maxHold = (tokenSupply * 20) / 1000; // 2% of total supply

        minBalanceForContractSell = (tokenSupply * 5) / 10000; // 0.05% swapback trigger
        maxAmountTokensForContractSell = (tokenSupply * 1) / 100; // 1% max swapback

        treasuryFeeBuy = _treasuryFeeBuy;
        projectFeeBuy = _projectFeeBuy;
        buyFeesTotal = treasuryFeeBuy + projectFeeBuy;

        treasuryFeeSell = _treasuryFeeSell;
        projectFeeSell = _projectFeeSell;
        sellFeesTotal = treasuryFeeSell + projectFeeSell;

        treasuryWallet = address(msg.sender);
        projectWallet = address(msg.sender);

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

        txLimitsWhitelist(owner(), true);
        txLimitsWhitelist(address(this), true);
        txLimitsWhitelist(address(0xdead), true);
        txLimitsWhitelist(treasuryWallet, true);

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

    receive() external payable {}

    /// @notice Launches the token and enables trading. Irriversable.
    function startLaunch() external onlyOwner {
        tokenLaunched = true;
        contractSellEnabled = true;
    }

    /// @notice Removes the max wallet and max transaction limits
    function finishLaunchPeriod() external onlyOwner returns (bool) {
        tradingLimitsOn = false;
        return true;
    }

    /// @notice Disables the Same wallet block transfer delay
    function disableBlockTxLimit() external onlyOwner returns (bool) {
        limitTxsPerBlock = false;
        return true;
    }

    /// @notice Changes the minimum balance of tokens the contract must have before duringContractSell tokens for ETH. Base 100000, so 0.5% = 500.
    function updateContractSellMin(
        uint256 newAmount
    ) external onlyOwner returns (bool) {
        require(
            newAmount >= totalSupply() / 100000,
            "Swap amount cannot be lower than 0.001% total supply."
        );
        require(
            newAmount <= (500 * totalSupply()) / 100000,
            "Swap amount cannot be higher than 0.5% total supply."
        );
        require(
            newAmount <= maxAmountTokensForContractSell,
            "Swap amount cannot be higher than maxAmountTokensForContractSell"
        );
        minBalanceForContractSell = newAmount;
        return true;
    }

    /// @notice Changes the maximum amount of tokens the contract can swap for ETH. Base 10000, so 0.5% = 50.
    function updateMaxContractSellAmount(
        uint256 newAmount
    ) external onlyOwner returns (bool) {
        require(
            newAmount >= minBalanceForContractSell,
            "Swap amount cannot be lower than minBalanceForContractSell"
        );
        maxAmountTokensForContractSell = newAmount;
        return true;
    }

    /// @notice Changes the maximum amount of tokens that can be bought or sold in a single transaction
    /// @param newNum Base 1000, so 1% = 10
    function updateMaxTxnAmount(uint256 newNum) external onlyOwner {
        require(newNum >= 2, "Cannot set maxTx lower than 0.2%");
        maxTx = (newNum * totalSupply()) / 1000;
    }

    /// @notice Changes the maximum amount of tokens a wallet can hold
    /// @param newNum Base 1000, so 1% = 10
    function updateMaxHoldAmount(uint256 newNum) external onlyOwner {
        require(newNum >= 5, "Cannot set maxHold lower than 0.5%");
        maxHold = (newNum * totalSupply()) / 1000;
    }

    /// @notice Sets if a wallet is excluded from the max wallet and tx limits
    /// @param updAds The wallet to update
    /// @param isEx If the wallet is excluded or not
    function txLimitsWhitelist(
        address updAds,
        bool isEx
    ) public onlyOwner {
        exemptFromMaxLimits[updAds] = isEx;
    }

    /// @notice Sets if the contract can sell tokens
    /// @param enabled set to false to disable selling
    function setContractSellEnabled(bool enabled) external onlyOwner {
        contractSellEnabled = enabled;
    }

    /// @notice Sets the fees for buys
    /// @param _treasuryFee The fee for the treasury wallet
    /// @param _projectFee The fee for the dev wallet
    function setBuyFees(
        uint256 _treasuryFee,
        uint256 _projectFee
    ) external onlyOwner {
        treasuryFeeBuy = _treasuryFee;
        projectFeeBuy = _projectFee;
        buyFeesTotal = treasuryFeeBuy + projectFeeBuy;
        require(buyFeesTotal <= 12, "Must keep fees at 12% or less");
    }

    /// @notice Sets the fees for sells
    /// @param _treasuryFee The fee for the treasury wallet
    /// @param _projectFee The fee for the dev wallet
    function setSellFees(
        uint256 _treasuryFee,
        uint256 _projectFee
    ) external onlyOwner {
        treasuryFeeSell = _treasuryFee;
        projectFeeSell = _projectFee;
        sellFeesTotal = treasuryFeeSell + projectFeeSell;
        require(sellFeesTotal <= 12, "Must keep fees at 12% or less");
    }

    /// @notice Sets if a wallet is excluded from fees
    /// @param account The wallet to update
    /// @param excluded If the wallet is excluded or not
    function excludeFromFees(address account, bool excluded) public onlyOwner {
        exemptFromFees[account] = excluded;
        emit FeeWhitelist(account, excluded);
    }

    /// @notice Sets an address as a new liquidity pair. You probably dont want to do this.
    /// @param pair The new pair
    function setAutomatedMarketMakerPair(
        address pair,
        bool value
    ) public onlyOwner {
        require(
            pair != dexPair,
            "The pair cannot be removed from isAMMPair"
        );

        _setAutomatedMarketMakerPair(pair, value);
    }

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

        emit SetAMMPair(pair, value);
    }

    /// @notice Sets a wallet as the new treasury wallet
    /// @param newTreasuryWallet The new treasury wallet
    function updateTreasuryWallet(
        address newTreasuryWallet
    ) external onlyOwner {
        emit treasuryWalletUpdated(newTreasuryWallet, treasuryWallet);
        treasuryWallet = newTreasuryWallet;
    }

    /// @notice Sets a wallet as the new dev wallet
    /// @param newWallet The new dev wallet
    function updateProjectWallet(address newWallet) external onlyOwner {
        emit projectWalletUpdated(newWallet, projectWallet);
        projectWallet = newWallet;
    }

    /// @notice Sets the blacklist status of multiple addresses
    /// @param addresses The addresses to update
    /// @param isBlacklisted If the addresses are blacklisted or not
    function updateBlacklistMultiple(
        address[] calldata addresses,
        bool isBlacklisted
    ) external onlyOwner {
        require(canSetBlacklist, "Blacklist is locked");
        for (uint256 i = 0; i < addresses.length; i++) {
            blacklisted[addresses[i]] = isBlacklisted;
        }
    }

    /// @notice Removes the owner ability to change the blacklist
    function lockBlacklist() external onlyOwner {
        canSetBlacklist = false;
    }

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

    function _update(
        address from,
        address to,
        uint256 amount
    ) internal override {
        if (amount == 0) {
            super._update(from, to, 0);
            return;
        }

        if (tradingLimitsOn) {
            if (
                from != owner() &&
                to != owner() &&
                to != address(0) &&
                to != address(0xdead) &&
                !duringContractSell
            ) {
                if (!tokenLaunched) {
                    require(
                        exemptFromFees[from] || exemptFromFees[to],
                        "Trading is not active."
                    );
                }

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

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

        uint256 contractTokenBalance = balanceOf(address(this));

        bool canSwap = contractTokenBalance >= minBalanceForContractSell;

        if (
            canSwap &&
            contractSellEnabled &&
            !duringContractSell &&
            !isAMMPair[from] &&
            !exemptFromFees[from] &&
            !exemptFromFees[to]
        ) {
            duringContractSell = true;

            swapBack();

            duringContractSell = false;
        }

        bool takeFee = !duringContractSell;

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

        if (!exemptFromFees[from] || !exemptFromFees[to]) {
            require(!blacklisted[from], "Address is blacklisted");
        }

        uint256 fees = 0;
        // only take fees on buys/sells, do not take on wallet transfers
        if (takeFee) {
            // on sell
            if (isAMMPair[to] && sellFeesTotal > 0) {
                fees = amount.mul(sellFeesTotal).div(100);
                tokensToSwapProject += (fees * projectFeeSell) / sellFeesTotal;
                tokensToSwapTreasury += (fees * treasuryFeeSell) / sellFeesTotal;
            }
            // on buy
            else if (isAMMPair[from] && buyFeesTotal > 0) {
                fees = amount.mul(buyFeesTotal).div(100);
                tokensToSwapProject += (fees * projectFeeBuy) / buyFeesTotal;
                tokensToSwapTreasury += (fees * treasuryFeeBuy) / buyFeesTotal;
            }

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

            amount -= fees;
        }

        super._update(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] = dexRouter.WETH();

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

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

    function swapBack() private {
        uint256 contractBalance = balanceOf(address(this));
        uint256 totalTokensToSwap = tokensToSwapTreasury + tokensToSwapProject;
        bool success;

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

        if (contractBalance > maxAmountTokensForContractSell) {
            contractBalance = maxAmountTokensForContractSell;
        }

        uint256 initialETHBalance = address(this).balance;

        swapTokensForEth(contractBalance);

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

        uint256 ethForProject = ethBalance.mul(tokensToSwapProject).div(totalTokensToSwap);

        tokensToSwapTreasury = 0;
        tokensToSwapProject = 0;

        (success, ) = address(projectWallet).call{value: ethForProject}("");

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

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"currentAllowance","type":"uint256"},{"internalType":"uint256","name":"requestedDecrease","type":"uint256"}],"name":"ERC20FailedDecreaseAllowance","type":"error"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"allowance","type":"uint256"},{"internalType":"uint256","name":"needed","type":"uint256"}],"name":"ERC20InsufficientAllowance","type":"error"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"uint256","name":"balance","type":"uint256"},{"internalType":"uint256","name":"needed","type":"uint256"}],"name":"ERC20InsufficientBalance","type":"error"},{"inputs":[{"internalType":"address","name":"approver","type":"address"}],"name":"ERC20InvalidApprover","type":"error"},{"inputs":[{"internalType":"address","name":"receiver","type":"address"}],"name":"ERC20InvalidReceiver","type":"error"},{"inputs":[{"internalType":"address","name":"sender","type":"address"}],"name":"ERC20InvalidSender","type":"error"},{"inputs":[{"internalType":"address","name":"spender","type":"address"}],"name":"ERC20InvalidSpender","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"FeeWhitelist","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":"SetAMMPair","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":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"projectWalletUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"treasuryWalletUpdated","type":"event"},{"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":"value","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"blacklisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyFeesTotal","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"canSetBlacklist","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"contractSellEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":"requestedDecrease","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"dexPair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"dexRouter","outputs":[{"internalType":"contract IDexRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"disableBlockTxLimit","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":"","type":"address"}],"name":"exemptFromMaxLimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"finishLaunchPeriod","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isAMMPair","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitTxsPerBlock","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"lockBlacklist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"maxAmountTokensForContractSell","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxHold","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTx","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minBalanceForContractSell","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":"projectFeeBuy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"projectFeeSell","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"projectWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellFeesTotal","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_treasuryFee","type":"uint256"},{"internalType":"uint256","name":"_projectFee","type":"uint256"}],"name":"setBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"setContractSellEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_treasuryFee","type":"uint256"},{"internalType":"uint256","name":"_projectFee","type":"uint256"}],"name":"setSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"startLaunch","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokenLaunched","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensToSwapProject","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensToSwapTreasury","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":"tradingLimitsOn","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","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":"treasuryFeeBuy","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"treasuryFeeSell","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"treasuryWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"txLimitsWhitelist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"addresses","type":"address[]"},{"internalType":"bool","name":"isBlacklisted","type":"bool"}],"name":"updateBlacklistMultiple","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateContractSellMin","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateMaxContractSellAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxHoldAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxTxnAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"updateProjectWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newTreasuryWallet","type":"address"}],"name":"updateTreasuryWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c06040525f600560156101000a81548160ff021916908315150217905550600160085f6101000a81548160ff0219169083151502179055506001600860016101000a81548160ff0219169083151502179055506001600d5f6101000a81548160ff0219169083151502179055505f600e60146101000a81548160ff02191690831515021790555034801562000093575f80fd5b506040518060400160405280600581526020017f57616765720000000000000000000000000000000000000000000000000000008152506040518060400160405280600281526020017f56530000000000000000000000000000000000000000000000000000000000008152508160039081620001119190620021c8565b508060049081620001239190620021c8565b505050620001466200013a620005fd60201b60201c565b6200060460201b60201c565b5f737a250d5630b4cf539739df2c5dacb4c659f2488d905062000171816001620006c760201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001ef573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062000215919062002311565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200027b573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620002a1919062002311565b6040518363ffffffff1660e01b8152600401620002c092919062002352565b6020604051808303815f875af1158015620002dd573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062000303919062002311565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff16815250506200034b60a0516001620006c760201b60201c565b6200036060a0516001620007ae60201b60201c565b5f600190505f600f90505f600190505f601490505f6c01431e0fae6d7217caa000000090506103e8600a82620003979190620023aa565b620003a3919062002421565b600a819055506103e8601482620003bb9190620023aa565b620003c7919062002421565b600981905550612710600582620003df9190620023aa565b620003eb919062002421565b6006819055506064600182620004029190620023aa565b6200040e919062002421565b600781905550846010819055508360118190555060115460105462000434919062002458565b600f8190555082601381905550816014819055506014546013546200045a919062002458565b60128190555033600d60016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555033600e5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555062000503620004f56200084c60201b60201c565b60016200087460201b60201c565b620005163060016200087460201b60201c565b6200052b61dead60016200087460201b60201c565b62000560600d60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016200087460201b60201c565b62000582620005746200084c60201b60201c565b6001620006c760201b60201c565b62000595306001620006c760201b60201c565b620005aa61dead6001620006c760201b60201c565b620005df600d60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff166001620006c760201b60201c565b620005f13382620009ab60201b60201c565b50505050505062002b0d565b5f33905090565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b620006d7620005fd60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620006fd6200084c60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000756576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200074d90620024f0565b60405180910390fd5b8060185f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b8060195f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fee6ce3a11a74f9a94b8a0152fc219acc6645b25bc298e2cae8ec6a520bd83da960405160405180910390a35050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b62000884620005fd60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620008aa6200084c60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000903576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620008fa90620024f0565b60405180910390fd5b8060175f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f781d26db56cdaee11e2fce438cd1461fa45f059fcd5f02aa8e6b1e5716d8d465826040516200099f91906200252c565b60405180910390a25050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362000a1e575f6040517fec442f0500000000000000000000000000000000000000000000000000000000815260040162000a15919062002547565b60405180910390fd5b62000a315f838362000a3560201b60201c565b5050565b5f810362000a565762000a5083835f620016eb60201b60201c565b620016e6565b60085f9054906101000a900460ff1615620011135762000a7b6200084c60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801562000af2575062000ac26200084c60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801562000b2b57505f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801562000b66575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801562000b805750600560149054906101000a900460ff16155b156200111257600e60149054906101000a900460ff1662000c7a5760175f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168062000c37575060175f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b62000c79576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000c7090620025b0565b60405180910390fd5b5b600860019054906101000a900460ff161562000e115762000ca06200084c60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415801562000d0a575060805173ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801562000d45575060a05173ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b1562000e105743600b5f3273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20541062000dcd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000dc4906200266a565b60405180910390fd5b43600b5f3273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055505b5b60195f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16801562000eaf575060185f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b1562000f6857600a5481111562000efd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000ef490620026fe565b60405180910390fd5b60095462000f11836200190f60201b60201c565b8262000f1e919062002458565b111562000f62576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000f59906200276c565b60405180910390fd5b62001111565b60195f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16801562001006575060185f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b156200105a57600a5481111562001054576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200104b9062002800565b60405180910390fd5b62001110565b60185f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff166200110f57600954620010bd836200190f60201b60201c565b82620010ca919062002458565b11156200110e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162001105906200276c565b60405180910390fd5b5b5b5b5b5b5f62001125306200190f60201b60201c565b90505f60065482101590508080156200114a5750600560159054906101000a900460ff165b8015620011645750600560149054906101000a900460ff16155b8015620011b8575060195f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b80156200120c575060175f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b801562001260575060175f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15620012ac576001600560146101000a81548160ff021916908315150217905550620012916200195460201b60201c565b5f600560146101000a81548160ff0219169083151502179055505b5f600560149054906101000a900460ff1615905060175f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16806200135c575060175f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b1562001366575f90505b60175f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16158062001404575060175f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b156200149857600c5f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff161562001497576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200148e906200286e565b60405180910390fd5b5b5f8115620016ce5760195f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015620014f857505f601254115b15620015a2576200152a60646200151b6012548862001b3b60201b90919060201c565b62001b5260201b90919060201c565b9050601254601454826200153f9190620023aa565b6200154b919062002421565b60165f8282546200155d919062002458565b9250508190555060125460135482620015779190620023aa565b62001583919062002421565b60155f82825462001595919062002458565b92505081905550620016a0565b60195f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015620015fa57505f600f54115b156200169f576200162c60646200161d600f548862001b3b60201b90919060201c565b62001b5260201b90919060201c565b9050600f5460115482620016419190620023aa565b6200164d919062002421565b60165f8282546200165f919062002458565b92505081905550600f5460105482620016799190620023aa565b62001685919062002421565b60155f82825462001697919062002458565b925050819055505b5b5f811115620016bd57620016bc873083620016eb60201b60201c565b5b8085620016cb91906200288e565b94505b620016e1878787620016eb60201b60201c565b505050505b505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036200173f578060025f82825462001732919062002458565b9250508190555062001810565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905081811015620017cb578381836040517fe450d38c000000000000000000000000000000000000000000000000000000008152600401620017c293929190620028d9565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550505b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362001859578060025f8282540392505081905550620018a3565b805f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162001902919062002914565b60405180910390a3505050565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b5f62001966306200190f60201b60201c565b90505f6016546015546200197b919062002458565b90505f808314806200198c57505f82145b156200199b5750505062001b39565b600754831115620019ac5760075492505b5f479050620019c18462001b6960201b60201c565b5f620019d7824762001d5b60201b90919060201c565b90505f62001a0585620019f66016548562001b3b60201b90919060201c565b62001b5260201b90919060201c565b90505f6015819055505f601681905550600e5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168160405162001a5c9062002960565b5f6040518083038185875af1925050503d805f811462001a98576040519150601f19603f3d011682016040523d82523d5f602084013e62001a9d565b606091505b505080945050600d60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff164760405162001aeb9062002960565b5f6040518083038185875af1925050503d805f811462001b27576040519150601f19603f3d011682016040523d82523d5f602084013e62001b2c565b606091505b5050809450505050505050505b565b5f818362001b4a9190620023aa565b905092915050565b5f818362001b61919062002421565b905092915050565b5f600267ffffffffffffffff81111562001b885762001b8762001f6e565b5b60405190808252806020026020018201604052801562001bb75781602001602082028036833780820191505090505b50905030815f8151811062001bd15762001bd062002976565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060805173ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562001c57573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062001c7d919062002311565b8160018151811062001c945762001c9362002976565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505062001ce3306080518462001d7260201b60201c565b60805173ffffffffffffffffffffffffffffffffffffffff1663791ac947835f8430426040518663ffffffff1660e01b815260040162001d2895949392919062002aab565b5f604051808303815f87803b15801562001d40575f80fd5b505af115801562001d53573d5f803e3d5ffd5b505050505050565b5f818362001d6a91906200288e565b905092915050565b62001d87838383600162001d8c60201b60201c565b505050565b5f73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff160362001dff575f6040517fe602df0500000000000000000000000000000000000000000000000000000000815260040162001df6919062002547565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160362001e72575f6040517f94280d6200000000000000000000000000000000000000000000000000000000815260040162001e69919062002547565b60405180910390fd5b8160015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550801562001f5e578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405162001f55919062002914565b60405180910390a35b50505050565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168062001fe057607f821691505b60208210810362001ff65762001ff562001f9b565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f600883026200205a7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826200201d565b6200206686836200201d565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f620020b0620020aa620020a4846200207e565b62002087565b6200207e565b9050919050565b5f819050919050565b620020cb8362002090565b620020e3620020da82620020b7565b84845462002029565b825550505050565b5f90565b620020f9620020eb565b62002106818484620020c0565b505050565b5b818110156200212d57620021215f82620020ef565b6001810190506200210c565b5050565b601f8211156200217c57620021468162001ffc565b62002151846200200e565b8101602085101562002161578190505b6200217962002170856200200e565b8301826200210b565b50505b505050565b5f82821c905092915050565b5f6200219e5f198460080262002181565b1980831691505092915050565b5f620021b883836200218d565b9150826002028217905092915050565b620021d38262001f64565b67ffffffffffffffff811115620021ef57620021ee62001f6e565b5b620021fb825462001fc8565b6200220882828562002131565b5f60209050601f8311600181146200223e575f841562002229578287015190505b620022358582620021ab565b865550620022a4565b601f1984166200224e8662001ffc565b5f5b82811015620022775784890151825560018201915060208501945060208101905062002250565b8683101562002297578489015162002293601f8916826200218d565b8355505b6001600288020188555050505b505050505050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f620022db82620022b0565b9050919050565b620022ed81620022cf565b8114620022f8575f80fd5b50565b5f815190506200230b81620022e2565b92915050565b5f60208284031215620023295762002328620022ac565b5b5f6200233884828501620022fb565b91505092915050565b6200234c81620022cf565b82525050565b5f604082019050620023675f83018562002341565b62002376602083018462002341565b9392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f620023b6826200207e565b9150620023c3836200207e565b9250828202620023d3816200207e565b91508282048414831517620023ed57620023ec6200237d565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f6200242d826200207e565b91506200243a836200207e565b9250826200244d576200244c620023f4565b5b828204905092915050565b5f62002464826200207e565b915062002471836200207e565b92508282019050808211156200248c576200248b6200237d565b5b92915050565b5f82825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f620024d860208362002492565b9150620024e582620024a2565b602082019050919050565b5f6020820190508181035f8301526200250981620024ca565b9050919050565b5f8115159050919050565b620025268162002510565b82525050565b5f602082019050620025415f8301846200251b565b92915050565b5f6020820190506200255c5f83018462002341565b92915050565b7f54726164696e67206973206e6f74206163746976652e000000000000000000005f82015250565b5f6200259860168362002492565b9150620025a58262002562565b602082019050919050565b5f6020820190508181035f830152620025c9816200258a565b9050919050565b7f5f7570646174653a3a205472616e736665722044656c617920656e61626c65645f8201527f2e20204f6e6c79206f6e652070757263686173652070657220626c6f636b206160208201527f6c6c6f7765642e00000000000000000000000000000000000000000000000000604082015250565b5f6200265260478362002492565b91506200265f82620025d0565b606082019050919050565b5f6020820190508181035f830152620026838162002644565b9050919050565b7f427579207472616e7366657220616d6f756e74206578636565647320746865205f8201527f6d617854782e0000000000000000000000000000000000000000000000000000602082015250565b5f620026e660268362002492565b9150620026f3826200268a565b604082019050919050565b5f6020820190508181035f8301526200271781620026d8565b9050919050565b7f4d61782077616c6c6574206578636565646564000000000000000000000000005f82015250565b5f6200275460138362002492565b915062002761826200271e565b602082019050919050565b5f6020820190508181035f830152620027858162002746565b9050919050565b7f53656c6c207472616e7366657220616d6f756e742065786365656473207468655f8201527f206d617854782e00000000000000000000000000000000000000000000000000602082015250565b5f620027e860278362002492565b9150620027f5826200278c565b604082019050919050565b5f6020820190508181035f8301526200281981620027da565b9050919050565b7f4164647265737320697320626c61636b6c6973746564000000000000000000005f82015250565b5f6200285660168362002492565b9150620028638262002820565b602082019050919050565b5f6020820190508181035f830152620028878162002848565b9050919050565b5f6200289a826200207e565b9150620028a7836200207e565b9250828203905081811115620028c257620028c16200237d565b5b92915050565b620028d3816200207e565b82525050565b5f606082019050620028ee5f83018662002341565b620028fd6020830185620028c8565b6200290c6040830184620028c8565b949350505050565b5f602082019050620029295f830184620028c8565b92915050565b5f81905092915050565b50565b5f620029495f836200292f565b9150620029568262002939565b5f82019050919050565b5f6200296c826200293c565b9150819050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f819050919050565b5f620029cc620029c6620029c084620029a3565b62002087565b6200207e565b9050919050565b620029de81620029ac565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b62002a1881620022cf565b82525050565b5f62002a2b838362002a0d565b60208301905092915050565b5f602082019050919050565b5f62002a4f82620029e4565b62002a5b8185620029ee565b935062002a6883620029fe565b805f5b8381101562002a9e57815162002a82888262002a1e565b975062002a8f8362002a37565b92505060018101905062002a6b565b5085935050505092915050565b5f60a08201905062002ac05f830188620028c8565b62002acf6020830187620029d3565b818103604083015262002ae3818662002a43565b905062002af4606083018562002341565b62002b036080830184620028c8565b9695505050505050565b60805160a051614d5662002b595f395f8181611a90015281816122d70152612b8d01525f8181610f0c01528181612b35015281816139a401528181613a830152613aaa0152614d565ff3fe60806040526004361061036e575f3560e01c8063830804c9116101c5578063b6332002116100f6578063dbac26e911610094578063de78e78a1161006e578063de78e78a14610c99578063f242ab4114610cc3578063f2fde38b14610ced578063f799b2c814610d1557610375565b8063dbac26e914610bf9578063dcbc1b5614610c35578063dd62ed3e14610c5d57610375565b8063c0246668116100d0578063c024666814610b41578063c463b99514610b69578063d6bb961214610b93578063d6dc84cc14610bcf57610375565b8063b633200214610ac3578063bbd2f21a14610aed578063beb08ab914610b1757610375565b80639a7a23d611610163578063a457c2d71161013d578063a457c2d7146109e7578063a9059cbb14610a23578063b0249cc614610a5f578063b2d8f20814610a9b57610375565b80639a7a23d61461096d5780639b77884d146109955780639fd8234e146109bf57610375565b80638fbef0971161019f5780638fbef097146108c75780639125ff84146108ef57806395d89b41146109195780639a6c614e1461094357610375565b8063830804c9146108375780638d1942a7146108615780638da5cb5b1461089d57610375565b806343278c611161029f57806370a082311161023d578063727fd35811610217578063727fd358146107915780637437681e146107bb5780637e7e5acc146107e5578063809d458d1461080f57610375565b806370a0823114610717578063715018a614610753578063719276281461076957610375565b80634fbee193116102795780634fbee1931461067357806359a945e9146106af57806365954704146106c55780636c53c8f7146106ed57610375565b806343278c61146105f55780634626402b1461061f57806348b98ef51461064957610375565b806318160ddd1161030c57806323b872dd116102e657806323b872dd1461052b578063313ce5671461056757806339509351146105915780633b7b6a10146105cd57610375565b806318160ddd146104af5780631a2953fe146104d9578063203e727e1461050357610375565b806306fdde031161034857806306fdde03146103e35780630758d9241461040d578063095ea7b31461043757806311aa0ee51461047357610375565b806303a88e801461037957806303a928eb146103a357806304019c14146103b957610375565b3661037557005b5f80fd5b348015610384575f80fd5b5061038d610d3f565b60405161039a9190613b69565b60405180910390f35b3480156103ae575f80fd5b506103b7610ddd565b005b3480156103c4575f80fd5b506103cd610e74565b6040516103da9190613b9a565b60405180910390f35b3480156103ee575f80fd5b506103f7610e7a565b6040516104049190613c3d565b60405180910390f35b348015610418575f80fd5b50610421610f0a565b60405161042e9190613cd7565b60405180910390f35b348015610442575f80fd5b5061045d60048036038101906104589190613d5d565b610f2e565b60405161046a9190613b69565b60405180910390f35b34801561047e575f80fd5b5061049960048036038101906104949190613d9b565b610f50565b6040516104a69190613b69565b60405180910390f35b3480156104ba575f80fd5b506104c3610f6d565b6040516104d09190613b9a565b60405180910390f35b3480156104e4575f80fd5b506104ed610f76565b6040516104fa9190613b69565b60405180910390f35b34801561050e575f80fd5b5061052960048036038101906105249190613dc6565b610f89565b005b348015610536575f80fd5b50610551600480360381019061054c9190613df1565b611072565b60405161055e9190613b69565b60405180910390f35b348015610572575f80fd5b5061057b6110a0565b6040516105889190613e5c565b60405180910390f35b34801561059c575f80fd5b506105b760048036038101906105b29190613d5d565b6110a8565b6040516105c49190613b69565b60405180910390f35b3480156105d8575f80fd5b506105f360048036038101906105ee9190613dc6565b6110de565b005b348015610600575f80fd5b506106096111c7565b6040516106169190613b9a565b60405180910390f35b34801561062a575f80fd5b506106336111cd565b6040516106409190613e84565b60405180910390f35b348015610654575f80fd5b5061065d6111f3565b60405161066a9190613b69565b60405180910390f35b34801561067e575f80fd5b5061069960048036038101906106949190613d9b565b611206565b6040516106a69190613b69565b60405180910390f35b3480156106ba575f80fd5b506106c3611258565b005b3480156106d0575f80fd5b506106eb60048036038101906106e69190613ec7565b61130c565b005b3480156106f8575f80fd5b506107016113a5565b60405161070e9190613b69565b60405180910390f35b348015610722575f80fd5b5061073d60048036038101906107389190613d9b565b6113b7565b60405161074a9190613b9a565b60405180910390f35b34801561075e575f80fd5b506107676113fc565b005b348015610774575f80fd5b5061078f600480360381019061078a9190613d9b565b611483565b005b34801561079c575f80fd5b506107a56115bd565b6040516107b29190613b9a565b60405180910390f35b3480156107c6575f80fd5b506107cf6115c3565b6040516107dc9190613b9a565b60405180910390f35b3480156107f0575f80fd5b506107f96115c9565b6040516108069190613b9a565b60405180910390f35b34801561081a575f80fd5b5061083560048036038101906108309190613d9b565b6115cf565b005b348015610842575f80fd5b5061084b61170b565b6040516108589190613b9a565b60405180910390f35b34801561086c575f80fd5b5061088760048036038101906108829190613dc6565b611711565b6040516108949190613b69565b60405180910390f35b3480156108a8575f80fd5b506108b16117e3565b6040516108be9190613e84565b60405180910390f35b3480156108d2575f80fd5b506108ed60048036038101906108e89190613f53565b61180b565b005b3480156108fa575f80fd5b50610903611976565b6040516109109190613b9a565b60405180910390f35b348015610924575f80fd5b5061092d61197c565b60405161093a9190613c3d565b60405180910390f35b34801561094e575f80fd5b50610957611a0c565b6040516109649190613b9a565b60405180910390f35b348015610978575f80fd5b50610993600480360381019061098e9190613fb0565b611a12565b005b3480156109a0575f80fd5b506109a9611b2a565b6040516109b69190613b9a565b60405180910390f35b3480156109ca575f80fd5b506109e560048036038101906109e09190613fee565b611b30565b005b3480156109f2575f80fd5b50610a0d6004803603810190610a089190613d5d565b611c1a565b604051610a1a9190613b69565b60405180910390f35b348015610a2e575f80fd5b50610a496004803603810190610a449190613d5d565b611c95565b604051610a569190613b69565b60405180910390f35b348015610a6a575f80fd5b50610a856004803603810190610a809190613d9b565b611cb7565b604051610a929190613b69565b60405180910390f35b348015610aa6575f80fd5b50610ac16004803603810190610abc9190613fee565b611cd4565b005b348015610ace575f80fd5b50610ad7611dbe565b604051610ae49190613b69565b60405180910390f35b348015610af8575f80fd5b50610b01611dd0565b604051610b0e9190613b9a565b60405180910390f35b348015610b22575f80fd5b50610b2b611dd6565b604051610b389190613e84565b60405180910390f35b348015610b4c575f80fd5b50610b676004803603810190610b629190613fb0565b611dfb565b005b348015610b74575f80fd5b50610b7d611f1d565b604051610b8a9190613b69565b60405180910390f35b348015610b9e575f80fd5b50610bb96004803603810190610bb49190613dc6565b611fba565b604051610bc69190613b69565b60405180910390f35b348015610bda575f80fd5b50610be3612149565b604051610bf09190613b9a565b60405180910390f35b348015610c04575f80fd5b50610c1f6004803603810190610c1a9190613d9b565b61214f565b604051610c2c9190613b69565b60405180910390f35b348015610c40575f80fd5b50610c5b6004803603810190610c569190613fb0565b61216c565b005b348015610c68575f80fd5b50610c836004803603810190610c7e919061402c565b612240565b604051610c909190613b9a565b60405180910390f35b348015610ca4575f80fd5b50610cad6122c2565b604051610cba9190613b69565b60405180910390f35b348015610cce575f80fd5b50610cd76122d5565b604051610ce49190613e84565b60405180910390f35b348015610cf8575f80fd5b50610d136004803603810190610d0e9190613d9b565b6122f9565b005b348015610d20575f80fd5b50610d296123ef565b604051610d369190613b9a565b60405180910390f35b5f610d486123f5565b73ffffffffffffffffffffffffffffffffffffffff16610d666117e3565b73ffffffffffffffffffffffffffffffffffffffff1614610dbc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610db3906140b4565b60405180910390fd5b5f600860016101000a81548160ff0219169083151502179055506001905090565b610de56123f5565b73ffffffffffffffffffffffffffffffffffffffff16610e036117e3565b73ffffffffffffffffffffffffffffffffffffffff1614610e59576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e50906140b4565b60405180910390fd5b5f600d5f6101000a81548160ff021916908315150217905550565b60165481565b606060038054610e89906140ff565b80601f0160208091040260200160405190810160405280929190818152602001828054610eb5906140ff565b8015610f005780601f10610ed757610100808354040283529160200191610f00565b820191905f5260205f20905b815481529060010190602001808311610ee357829003601f168201915b5050505050905090565b7f000000000000000000000000000000000000000000000000000000000000000081565b5f80610f386123f5565b9050610f458185856123fc565b600191505092915050565b6018602052805f5260405f205f915054906101000a900460ff1681565b5f600254905090565b600860019054906101000a900460ff1681565b610f916123f5565b73ffffffffffffffffffffffffffffffffffffffff16610faf6117e3565b73ffffffffffffffffffffffffffffffffffffffff1614611005576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ffc906140b4565b60405180910390fd5b6002811015611049576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161104090614179565b60405180910390fd5b6103e8611054610f6d565b8261105f91906141c4565b6110699190614232565b600a8190555050565b5f8061107c6123f5565b905061108985828561240e565b6110948585856124a0565b60019150509392505050565b5f6012905090565b5f806110b26123f5565b90506110d38185856110c48589612240565b6110ce9190614262565b6123fc565b600191505092915050565b6110e66123f5565b73ffffffffffffffffffffffffffffffffffffffff166111046117e3565b73ffffffffffffffffffffffffffffffffffffffff161461115a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611151906140b4565b60405180910390fd5b600581101561119e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161119590614305565b60405180910390fd5b6103e86111a9610f6d565b826111b491906141c4565b6111be9190614232565b60098190555050565b60065481565b600d60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600560159054906101000a900460ff1681565b5f60175f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169050919050565b6112606123f5565b73ffffffffffffffffffffffffffffffffffffffff1661127e6117e3565b73ffffffffffffffffffffffffffffffffffffffff16146112d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112cb906140b4565b60405180910390fd5b6001600e60146101000a81548160ff0219169083151502179055506001600560156101000a81548160ff021916908315150217905550565b6113146123f5565b73ffffffffffffffffffffffffffffffffffffffff166113326117e3565b73ffffffffffffffffffffffffffffffffffffffff1614611388576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161137f906140b4565b60405180910390fd5b80600560156101000a81548160ff02191690831515021790555050565b600d5f9054906101000a900460ff1681565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b6114046123f5565b73ffffffffffffffffffffffffffffffffffffffff166114226117e3565b73ffffffffffffffffffffffffffffffffffffffff1614611478576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161146f906140b4565b60405180910390fd5b6114815f612590565b565b61148b6123f5565b73ffffffffffffffffffffffffffffffffffffffff166114a96117e3565b73ffffffffffffffffffffffffffffffffffffffff16146114ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114f6906140b4565b60405180910390fd5b600e5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fd0bdd1bf92049384d44f81d258f51a39b26cfc1d256348efb3b109fd8db7271160405160405180910390a380600e5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60155481565b600a5481565b600f5481565b6115d76123f5565b73ffffffffffffffffffffffffffffffffffffffff166115f56117e3565b73ffffffffffffffffffffffffffffffffffffffff161461164b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611642906140b4565b60405180910390fd5b600d60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f02f8a1483978974a6412ba3a67040b4daa4fc0dfe9439a7295f9a9538394f63560405160405180910390a380600d60016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60075481565b5f61171a6123f5565b73ffffffffffffffffffffffffffffffffffffffff166117386117e3565b73ffffffffffffffffffffffffffffffffffffffff161461178e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611785906140b4565b60405180910390fd5b6006548210156117d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117ca90614393565b60405180910390fd5b8160078190555060019050919050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6118136123f5565b73ffffffffffffffffffffffffffffffffffffffff166118316117e3565b73ffffffffffffffffffffffffffffffffffffffff1614611887576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161187e906140b4565b60405180910390fd5b600d5f9054906101000a900460ff166118d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118cc906143fb565b60405180910390fd5b5f5b838390508110156119705781600c5f8686858181106118f9576118f8614419565b5b905060200201602081019061190e9190613d9b565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550808061196890614446565b9150506118d7565b50505050565b60135481565b60606004805461198b906140ff565b80601f01602080910402602001604051908101604052809291908181526020018280546119b7906140ff565b8015611a025780601f106119d957610100808354040283529160200191611a02565b820191905f5260205f20905b8154815290600101906020018083116119e557829003601f168201915b5050505050905090565b60095481565b611a1a6123f5565b73ffffffffffffffffffffffffffffffffffffffff16611a386117e3565b73ffffffffffffffffffffffffffffffffffffffff1614611a8e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a85906140b4565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611b1c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b13906144fd565b60405180910390fd5b611b268282612653565b5050565b60115481565b611b386123f5565b73ffffffffffffffffffffffffffffffffffffffff16611b566117e3565b73ffffffffffffffffffffffffffffffffffffffff1614611bac576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ba3906140b4565b60405180910390fd5b8160138190555080601481905550601454601354611bca9190614262565b601281905550600c6012541115611c16576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c0d90614565565b60405180910390fd5b5050565b5f80611c246123f5565b90505f611c318286612240565b905083811015611c7c578481856040517fa60f030c000000000000000000000000000000000000000000000000000000008152600401611c7393929190614583565b60405180910390fd5b611c8982868684036123fc565b60019250505092915050565b5f80611c9f6123f5565b9050611cac8185856124a0565b600191505092915050565b6019602052805f5260405f205f915054906101000a900460ff1681565b611cdc6123f5565b73ffffffffffffffffffffffffffffffffffffffff16611cfa6117e3565b73ffffffffffffffffffffffffffffffffffffffff1614611d50576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d47906140b4565b60405180910390fd5b8160108190555080601181905550601154601054611d6e9190614262565b600f81905550600c600f541115611dba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611db190614565565b60405180910390fd5b5050565b60085f9054906101000a900460ff1681565b60105481565b600e5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611e036123f5565b73ffffffffffffffffffffffffffffffffffffffff16611e216117e3565b73ffffffffffffffffffffffffffffffffffffffff1614611e77576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e6e906140b4565b60405180910390fd5b8060175f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f781d26db56cdaee11e2fce438cd1461fa45f059fcd5f02aa8e6b1e5716d8d46582604051611f119190613b69565b60405180910390a25050565b5f611f266123f5565b73ffffffffffffffffffffffffffffffffffffffff16611f446117e3565b73ffffffffffffffffffffffffffffffffffffffff1614611f9a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f91906140b4565b60405180910390fd5b5f60085f6101000a81548160ff0219169083151502179055506001905090565b5f611fc36123f5565b73ffffffffffffffffffffffffffffffffffffffff16611fe16117e3565b73ffffffffffffffffffffffffffffffffffffffff1614612037576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161202e906140b4565b60405180910390fd5b620186a0612043610f6d565b61204d9190614232565b82101561208f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161208690614628565b60405180910390fd5b620186a061209b610f6d565b6101f46120a891906141c4565b6120b29190614232565b8211156120f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120eb906146b6565b60405180910390fd5b600754821115612139576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161213090614744565b60405180910390fd5b8160068190555060019050919050565b60125481565b600c602052805f5260405f205f915054906101000a900460ff1681565b6121746123f5565b73ffffffffffffffffffffffffffffffffffffffff166121926117e3565b73ffffffffffffffffffffffffffffffffffffffff16146121e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121df906140b4565b60405180910390fd5b8060185f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b600e60149054906101000a900460ff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b6123016123f5565b73ffffffffffffffffffffffffffffffffffffffff1661231f6117e3565b73ffffffffffffffffffffffffffffffffffffffff1614612375576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161236c906140b4565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036123e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123da906147d2565b60405180910390fd5b6123ec81612590565b50565b60145481565b5f33905090565b61240983838360016126f1565b505050565b5f6124198484612240565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811461249a578181101561248b578281836040517ffb8f41b200000000000000000000000000000000000000000000000000000000815260040161248293929190614583565b60405180910390fd5b61249984848484035f6126f1565b5b50505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612510575f6040517f96c6fd1e0000000000000000000000000000000000000000000000000000000081526004016125079190613e84565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612580575f6040517fec442f050000000000000000000000000000000000000000000000000000000081526004016125779190613e84565b60405180910390fd5b61258b8383836128c0565b505050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8060195f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fee6ce3a11a74f9a94b8a0152fc219acc6645b25bc298e2cae8ec6a520bd83da960405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603612761575f6040517fe602df050000000000000000000000000000000000000000000000000000000081526004016127589190613e84565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036127d1575f6040517f94280d620000000000000000000000000000000000000000000000000000000081526004016127c89190613e84565b60405180910390fd5b8160015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208190555080156128ba578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040516128b19190613b9a565b60405180910390a35b50505050565b5f81036128d7576128d283835f613501565b6134fc565b60085f9054906101000a900460ff1615612f7f576128f36117e3565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561296157506129316117e3565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561299957505f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156129d3575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156129ec5750600560149054906101000a900460ff16155b15612f7e57600e60149054906101000a900460ff16612ae05760175f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680612aa0575060175f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b612adf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ad69061483a565b60405180910390fd5b5b600860019054906101000a900460ff1615612ca457612afd6117e3565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614158015612b8457507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612bdc57507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15612ca35743600b5f3273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205410612c60576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c57906148ee565b60405180910390fd5b43600b5f3273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055505b5b60195f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015612d41575060185f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15612de857600a54811115612d8b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d829061497c565b60405180910390fd5b600954612d97836113b7565b82612da29190614262565b1115612de3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612dda906149e4565b60405180910390fd5b612f7d565b60195f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015612e85575060185f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15612ed457600a54811115612ecf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ec690614a72565b60405180910390fd5b612f7c565b60185f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16612f7b57600954612f2e836113b7565b82612f399190614262565b1115612f7a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f71906149e4565b60405180910390fd5b5b5b5b5b5b5f612f89306113b7565b90505f6006548210159050808015612fad5750600560159054906101000a900460ff165b8015612fc65750600560149054906101000a900460ff16155b8015613019575060195f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b801561306c575060175f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b80156130bf575060175f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15613102576001600560146101000a81548160ff0219169083151502179055506130e761371a565b5f600560146101000a81548160ff0219169083151502179055505b5f600560149054906101000a900460ff1615905060175f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16806131b1575060175f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b156131ba575f90505b60175f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff161580613257575060175f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b156132e757600c5f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16156132e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132dd90614ada565b60405180910390fd5b5b5f81156134ec5760195f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16801561334557505f601254115b156133dd576133726064613364601254886138dd90919063ffffffff16565b6138f290919063ffffffff16565b90506012546014548261338591906141c4565b61338f9190614232565b60165f82825461339f9190614262565b92505081905550601254601354826133b791906141c4565b6133c19190614232565b60155f8282546133d19190614262565b925050819055506134c9565b60195f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16801561343457505f600f54115b156134c8576134616064613453600f54886138dd90919063ffffffff16565b6138f290919063ffffffff16565b9050600f546011548261347491906141c4565b61347e9190614232565b60165f82825461348e9190614262565b92505081905550600f54601054826134a691906141c4565b6134b09190614232565b60155f8282546134c09190614262565b925050819055505b5b5f8111156134dd576134dc873083613501565b5b80856134e99190614af8565b94505b6134f7878787613501565b505050505b505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603613551578060025f8282546135459190614262565b9250508190555061361f565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050818110156135da578381836040517fe450d38c0000000000000000000000000000000000000000000000000000000081526004016135d193929190614583565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550505b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603613666578060025f82825403925050819055506136b0565b805f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161370d9190613b9a565b60405180910390a3505050565b5f613724306113b7565b90505f6016546015546137379190614262565b90505f8083148061374757505f82145b15613754575050506138db565b6007548311156137645760075492505b5f47905061377184613907565b5f6137858247613b3a90919063ffffffff16565b90505f6137af856137a1601654856138dd90919063ffffffff16565b6138f290919063ffffffff16565b90505f6015819055505f601681905550600e5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168160405161380490614b58565b5f6040518083038185875af1925050503d805f811461383e576040519150601f19603f3d011682016040523d82523d5f602084013e613843565b606091505b505080945050600d60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff164760405161388f90614b58565b5f6040518083038185875af1925050503d805f81146138c9576040519150601f19603f3d011682016040523d82523d5f602084013e6138ce565b606091505b5050809450505050505050505b565b5f81836138ea91906141c4565b905092915050565b5f81836138ff9190614232565b905092915050565b5f600267ffffffffffffffff81111561392357613922614b6c565b5b6040519080825280602002602001820160405280156139515781602001602082028036833780820191505090505b50905030815f8151811061396857613967614419565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613a0b573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613a2f9190614bad565b81600181518110613a4357613a42614419565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613aa8307f0000000000000000000000000000000000000000000000000000000000000000846123fc565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac947835f8430426040518663ffffffff1660e01b8152600401613b09959493929190614cc8565b5f604051808303815f87803b158015613b20575f80fd5b505af1158015613b32573d5f803e3d5ffd5b505050505050565b5f8183613b479190614af8565b905092915050565b5f8115159050919050565b613b6381613b4f565b82525050565b5f602082019050613b7c5f830184613b5a565b92915050565b5f819050919050565b613b9481613b82565b82525050565b5f602082019050613bad5f830184613b8b565b92915050565b5f81519050919050565b5f82825260208201905092915050565b5f5b83811015613bea578082015181840152602081019050613bcf565b5f8484015250505050565b5f601f19601f8301169050919050565b5f613c0f82613bb3565b613c198185613bbd565b9350613c29818560208601613bcd565b613c3281613bf5565b840191505092915050565b5f6020820190508181035f830152613c558184613c05565b905092915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f819050919050565b5f613c9f613c9a613c9584613c5d565b613c7c565b613c5d565b9050919050565b5f613cb082613c85565b9050919050565b5f613cc182613ca6565b9050919050565b613cd181613cb7565b82525050565b5f602082019050613cea5f830184613cc8565b92915050565b5f80fd5b5f80fd5b5f613d0282613c5d565b9050919050565b613d1281613cf8565b8114613d1c575f80fd5b50565b5f81359050613d2d81613d09565b92915050565b613d3c81613b82565b8114613d46575f80fd5b50565b5f81359050613d5781613d33565b92915050565b5f8060408385031215613d7357613d72613cf0565b5b5f613d8085828601613d1f565b9250506020613d9185828601613d49565b9150509250929050565b5f60208284031215613db057613daf613cf0565b5b5f613dbd84828501613d1f565b91505092915050565b5f60208284031215613ddb57613dda613cf0565b5b5f613de884828501613d49565b91505092915050565b5f805f60608486031215613e0857613e07613cf0565b5b5f613e1586828701613d1f565b9350506020613e2686828701613d1f565b9250506040613e3786828701613d49565b9150509250925092565b5f60ff82169050919050565b613e5681613e41565b82525050565b5f602082019050613e6f5f830184613e4d565b92915050565b613e7e81613cf8565b82525050565b5f602082019050613e975f830184613e75565b92915050565b613ea681613b4f565b8114613eb0575f80fd5b50565b5f81359050613ec181613e9d565b92915050565b5f60208284031215613edc57613edb613cf0565b5b5f613ee984828501613eb3565b91505092915050565b5f80fd5b5f80fd5b5f80fd5b5f8083601f840112613f1357613f12613ef2565b5b8235905067ffffffffffffffff811115613f3057613f2f613ef6565b5b602083019150836020820283011115613f4c57613f4b613efa565b5b9250929050565b5f805f60408486031215613f6a57613f69613cf0565b5b5f84013567ffffffffffffffff811115613f8757613f86613cf4565b5b613f9386828701613efe565b93509350506020613fa686828701613eb3565b9150509250925092565b5f8060408385031215613fc657613fc5613cf0565b5b5f613fd385828601613d1f565b9250506020613fe485828601613eb3565b9150509250929050565b5f806040838503121561400457614003613cf0565b5b5f61401185828601613d49565b925050602061402285828601613d49565b9150509250929050565b5f806040838503121561404257614041613cf0565b5b5f61404f85828601613d1f565b925050602061406085828601613d1f565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f61409e602083613bbd565b91506140a98261406a565b602082019050919050565b5f6020820190508181035f8301526140cb81614092565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061411657607f821691505b602082108103614129576141286140d2565b5b50919050565b7f43616e6e6f7420736574206d61785478206c6f776572207468616e20302e32255f82015250565b5f614163602083613bbd565b915061416e8261412f565b602082019050919050565b5f6020820190508181035f83015261419081614157565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f6141ce82613b82565b91506141d983613b82565b92508282026141e781613b82565b915082820484148315176141fe576141fd614197565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f61423c82613b82565b915061424783613b82565b92508261425757614256614205565b5b828204905092915050565b5f61426c82613b82565b915061427783613b82565b925082820190508082111561428f5761428e614197565b5b92915050565b7f43616e6e6f7420736574206d6178486f6c64206c6f776572207468616e20302e5f8201527f3525000000000000000000000000000000000000000000000000000000000000602082015250565b5f6142ef602283613bbd565b91506142fa82614295565b604082019050919050565b5f6020820190508181035f83015261431c816142e3565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e5f8201527f206d696e42616c616e6365466f72436f6e747261637453656c6c000000000000602082015250565b5f61437d603a83613bbd565b915061438882614323565b604082019050919050565b5f6020820190508181035f8301526143aa81614371565b9050919050565b7f426c61636b6c697374206973206c6f636b6564000000000000000000000000005f82015250565b5f6143e5601383613bbd565b91506143f0826143b1565b602082019050919050565b5f6020820190508181035f830152614412816143d9565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f61445082613b82565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361448257614481614197565b5b600182019050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d205f8201527f6973414d4d506169720000000000000000000000000000000000000000000000602082015250565b5f6144e7602983613bbd565b91506144f28261448d565b604082019050919050565b5f6020820190508181035f830152614514816144db565b9050919050565b7f4d757374206b656570206665657320617420313225206f72206c6573730000005f82015250565b5f61454f601d83613bbd565b915061455a8261451b565b602082019050919050565b5f6020820190508181035f83015261457c81614543565b9050919050565b5f6060820190506145965f830186613e75565b6145a36020830185613b8b565b6145b06040830184613b8b565b949350505050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e5f8201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b5f614612603583613bbd565b915061461d826145b8565b604082019050919050565b5f6020820190508181035f83015261463f81614606565b9050919050565b7f5377617020616d6f756e742063616e6e6f7420626520686967686572207468615f8201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b5f6146a0603483613bbd565b91506146ab82614646565b604082019050919050565b5f6020820190508181035f8301526146cd81614694565b9050919050565b7f5377617020616d6f756e742063616e6e6f7420626520686967686572207468615f8201527f6e206d6178416d6f756e74546f6b656e73466f72436f6e747261637453656c6c602082015250565b5f61472e604083613bbd565b9150614739826146d4565b604082019050919050565b5f6020820190508181035f83015261475b81614722565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f6147bc602683613bbd565b91506147c782614762565b604082019050919050565b5f6020820190508181035f8301526147e9816147b0565b9050919050565b7f54726164696e67206973206e6f74206163746976652e000000000000000000005f82015250565b5f614824601683613bbd565b915061482f826147f0565b602082019050919050565b5f6020820190508181035f83015261485181614818565b9050919050565b7f5f7570646174653a3a205472616e736665722044656c617920656e61626c65645f8201527f2e20204f6e6c79206f6e652070757263686173652070657220626c6f636b206160208201527f6c6c6f7765642e00000000000000000000000000000000000000000000000000604082015250565b5f6148d8604783613bbd565b91506148e382614858565b606082019050919050565b5f6020820190508181035f830152614905816148cc565b9050919050565b7f427579207472616e7366657220616d6f756e74206578636565647320746865205f8201527f6d617854782e0000000000000000000000000000000000000000000000000000602082015250565b5f614966602683613bbd565b91506149718261490c565b604082019050919050565b5f6020820190508181035f8301526149938161495a565b9050919050565b7f4d61782077616c6c6574206578636565646564000000000000000000000000005f82015250565b5f6149ce601383613bbd565b91506149d98261499a565b602082019050919050565b5f6020820190508181035f8301526149fb816149c2565b9050919050565b7f53656c6c207472616e7366657220616d6f756e742065786365656473207468655f8201527f206d617854782e00000000000000000000000000000000000000000000000000602082015250565b5f614a5c602783613bbd565b9150614a6782614a02565b604082019050919050565b5f6020820190508181035f830152614a8981614a50565b9050919050565b7f4164647265737320697320626c61636b6c6973746564000000000000000000005f82015250565b5f614ac4601683613bbd565b9150614acf82614a90565b602082019050919050565b5f6020820190508181035f830152614af181614ab8565b9050919050565b5f614b0282613b82565b9150614b0d83613b82565b9250828203905081811115614b2557614b24614197565b5b92915050565b5f81905092915050565b50565b5f614b435f83614b2b565b9150614b4e82614b35565b5f82019050919050565b5f614b6282614b38565b9150819050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f81519050614ba781613d09565b92915050565b5f60208284031215614bc257614bc1613cf0565b5b5f614bcf84828501614b99565b91505092915050565b5f819050919050565b5f614bfb614bf6614bf184614bd8565b613c7c565b613b82565b9050919050565b614c0b81614be1565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b614c4381613cf8565b82525050565b5f614c548383614c3a565b60208301905092915050565b5f602082019050919050565b5f614c7682614c11565b614c808185614c1b565b9350614c8b83614c2b565b805f5b83811015614cbb578151614ca28882614c49565b9750614cad83614c60565b925050600181019050614c8e565b5085935050505092915050565b5f60a082019050614cdb5f830188613b8b565b614ce86020830187614c02565b8181036040830152614cfa8186614c6c565b9050614d096060830185613e75565b614d166080830184613b8b565b969550505050505056fea2646970667358221220090281cce6ebaf1bddc3b4041a58995c6d44463b8c6a8cbb97254fad2cdef1f364736f6c63430008150033

Deployed Bytecode

0x60806040526004361061036e575f3560e01c8063830804c9116101c5578063b6332002116100f6578063dbac26e911610094578063de78e78a1161006e578063de78e78a14610c99578063f242ab4114610cc3578063f2fde38b14610ced578063f799b2c814610d1557610375565b8063dbac26e914610bf9578063dcbc1b5614610c35578063dd62ed3e14610c5d57610375565b8063c0246668116100d0578063c024666814610b41578063c463b99514610b69578063d6bb961214610b93578063d6dc84cc14610bcf57610375565b8063b633200214610ac3578063bbd2f21a14610aed578063beb08ab914610b1757610375565b80639a7a23d611610163578063a457c2d71161013d578063a457c2d7146109e7578063a9059cbb14610a23578063b0249cc614610a5f578063b2d8f20814610a9b57610375565b80639a7a23d61461096d5780639b77884d146109955780639fd8234e146109bf57610375565b80638fbef0971161019f5780638fbef097146108c75780639125ff84146108ef57806395d89b41146109195780639a6c614e1461094357610375565b8063830804c9146108375780638d1942a7146108615780638da5cb5b1461089d57610375565b806343278c611161029f57806370a082311161023d578063727fd35811610217578063727fd358146107915780637437681e146107bb5780637e7e5acc146107e5578063809d458d1461080f57610375565b806370a0823114610717578063715018a614610753578063719276281461076957610375565b80634fbee193116102795780634fbee1931461067357806359a945e9146106af57806365954704146106c55780636c53c8f7146106ed57610375565b806343278c61146105f55780634626402b1461061f57806348b98ef51461064957610375565b806318160ddd1161030c57806323b872dd116102e657806323b872dd1461052b578063313ce5671461056757806339509351146105915780633b7b6a10146105cd57610375565b806318160ddd146104af5780631a2953fe146104d9578063203e727e1461050357610375565b806306fdde031161034857806306fdde03146103e35780630758d9241461040d578063095ea7b31461043757806311aa0ee51461047357610375565b806303a88e801461037957806303a928eb146103a357806304019c14146103b957610375565b3661037557005b5f80fd5b348015610384575f80fd5b5061038d610d3f565b60405161039a9190613b69565b60405180910390f35b3480156103ae575f80fd5b506103b7610ddd565b005b3480156103c4575f80fd5b506103cd610e74565b6040516103da9190613b9a565b60405180910390f35b3480156103ee575f80fd5b506103f7610e7a565b6040516104049190613c3d565b60405180910390f35b348015610418575f80fd5b50610421610f0a565b60405161042e9190613cd7565b60405180910390f35b348015610442575f80fd5b5061045d60048036038101906104589190613d5d565b610f2e565b60405161046a9190613b69565b60405180910390f35b34801561047e575f80fd5b5061049960048036038101906104949190613d9b565b610f50565b6040516104a69190613b69565b60405180910390f35b3480156104ba575f80fd5b506104c3610f6d565b6040516104d09190613b9a565b60405180910390f35b3480156104e4575f80fd5b506104ed610f76565b6040516104fa9190613b69565b60405180910390f35b34801561050e575f80fd5b5061052960048036038101906105249190613dc6565b610f89565b005b348015610536575f80fd5b50610551600480360381019061054c9190613df1565b611072565b60405161055e9190613b69565b60405180910390f35b348015610572575f80fd5b5061057b6110a0565b6040516105889190613e5c565b60405180910390f35b34801561059c575f80fd5b506105b760048036038101906105b29190613d5d565b6110a8565b6040516105c49190613b69565b60405180910390f35b3480156105d8575f80fd5b506105f360048036038101906105ee9190613dc6565b6110de565b005b348015610600575f80fd5b506106096111c7565b6040516106169190613b9a565b60405180910390f35b34801561062a575f80fd5b506106336111cd565b6040516106409190613e84565b60405180910390f35b348015610654575f80fd5b5061065d6111f3565b60405161066a9190613b69565b60405180910390f35b34801561067e575f80fd5b5061069960048036038101906106949190613d9b565b611206565b6040516106a69190613b69565b60405180910390f35b3480156106ba575f80fd5b506106c3611258565b005b3480156106d0575f80fd5b506106eb60048036038101906106e69190613ec7565b61130c565b005b3480156106f8575f80fd5b506107016113a5565b60405161070e9190613b69565b60405180910390f35b348015610722575f80fd5b5061073d60048036038101906107389190613d9b565b6113b7565b60405161074a9190613b9a565b60405180910390f35b34801561075e575f80fd5b506107676113fc565b005b348015610774575f80fd5b5061078f600480360381019061078a9190613d9b565b611483565b005b34801561079c575f80fd5b506107a56115bd565b6040516107b29190613b9a565b60405180910390f35b3480156107c6575f80fd5b506107cf6115c3565b6040516107dc9190613b9a565b60405180910390f35b3480156107f0575f80fd5b506107f96115c9565b6040516108069190613b9a565b60405180910390f35b34801561081a575f80fd5b5061083560048036038101906108309190613d9b565b6115cf565b005b348015610842575f80fd5b5061084b61170b565b6040516108589190613b9a565b60405180910390f35b34801561086c575f80fd5b5061088760048036038101906108829190613dc6565b611711565b6040516108949190613b69565b60405180910390f35b3480156108a8575f80fd5b506108b16117e3565b6040516108be9190613e84565b60405180910390f35b3480156108d2575f80fd5b506108ed60048036038101906108e89190613f53565b61180b565b005b3480156108fa575f80fd5b50610903611976565b6040516109109190613b9a565b60405180910390f35b348015610924575f80fd5b5061092d61197c565b60405161093a9190613c3d565b60405180910390f35b34801561094e575f80fd5b50610957611a0c565b6040516109649190613b9a565b60405180910390f35b348015610978575f80fd5b50610993600480360381019061098e9190613fb0565b611a12565b005b3480156109a0575f80fd5b506109a9611b2a565b6040516109b69190613b9a565b60405180910390f35b3480156109ca575f80fd5b506109e560048036038101906109e09190613fee565b611b30565b005b3480156109f2575f80fd5b50610a0d6004803603810190610a089190613d5d565b611c1a565b604051610a1a9190613b69565b60405180910390f35b348015610a2e575f80fd5b50610a496004803603810190610a449190613d5d565b611c95565b604051610a569190613b69565b60405180910390f35b348015610a6a575f80fd5b50610a856004803603810190610a809190613d9b565b611cb7565b604051610a929190613b69565b60405180910390f35b348015610aa6575f80fd5b50610ac16004803603810190610abc9190613fee565b611cd4565b005b348015610ace575f80fd5b50610ad7611dbe565b604051610ae49190613b69565b60405180910390f35b348015610af8575f80fd5b50610b01611dd0565b604051610b0e9190613b9a565b60405180910390f35b348015610b22575f80fd5b50610b2b611dd6565b604051610b389190613e84565b60405180910390f35b348015610b4c575f80fd5b50610b676004803603810190610b629190613fb0565b611dfb565b005b348015610b74575f80fd5b50610b7d611f1d565b604051610b8a9190613b69565b60405180910390f35b348015610b9e575f80fd5b50610bb96004803603810190610bb49190613dc6565b611fba565b604051610bc69190613b69565b60405180910390f35b348015610bda575f80fd5b50610be3612149565b604051610bf09190613b9a565b60405180910390f35b348015610c04575f80fd5b50610c1f6004803603810190610c1a9190613d9b565b61214f565b604051610c2c9190613b69565b60405180910390f35b348015610c40575f80fd5b50610c5b6004803603810190610c569190613fb0565b61216c565b005b348015610c68575f80fd5b50610c836004803603810190610c7e919061402c565b612240565b604051610c909190613b9a565b60405180910390f35b348015610ca4575f80fd5b50610cad6122c2565b604051610cba9190613b69565b60405180910390f35b348015610cce575f80fd5b50610cd76122d5565b604051610ce49190613e84565b60405180910390f35b348015610cf8575f80fd5b50610d136004803603810190610d0e9190613d9b565b6122f9565b005b348015610d20575f80fd5b50610d296123ef565b604051610d369190613b9a565b60405180910390f35b5f610d486123f5565b73ffffffffffffffffffffffffffffffffffffffff16610d666117e3565b73ffffffffffffffffffffffffffffffffffffffff1614610dbc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610db3906140b4565b60405180910390fd5b5f600860016101000a81548160ff0219169083151502179055506001905090565b610de56123f5565b73ffffffffffffffffffffffffffffffffffffffff16610e036117e3565b73ffffffffffffffffffffffffffffffffffffffff1614610e59576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e50906140b4565b60405180910390fd5b5f600d5f6101000a81548160ff021916908315150217905550565b60165481565b606060038054610e89906140ff565b80601f0160208091040260200160405190810160405280929190818152602001828054610eb5906140ff565b8015610f005780601f10610ed757610100808354040283529160200191610f00565b820191905f5260205f20905b815481529060010190602001808311610ee357829003601f168201915b5050505050905090565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b5f80610f386123f5565b9050610f458185856123fc565b600191505092915050565b6018602052805f5260405f205f915054906101000a900460ff1681565b5f600254905090565b600860019054906101000a900460ff1681565b610f916123f5565b73ffffffffffffffffffffffffffffffffffffffff16610faf6117e3565b73ffffffffffffffffffffffffffffffffffffffff1614611005576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ffc906140b4565b60405180910390fd5b6002811015611049576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161104090614179565b60405180910390fd5b6103e8611054610f6d565b8261105f91906141c4565b6110699190614232565b600a8190555050565b5f8061107c6123f5565b905061108985828561240e565b6110948585856124a0565b60019150509392505050565b5f6012905090565b5f806110b26123f5565b90506110d38185856110c48589612240565b6110ce9190614262565b6123fc565b600191505092915050565b6110e66123f5565b73ffffffffffffffffffffffffffffffffffffffff166111046117e3565b73ffffffffffffffffffffffffffffffffffffffff161461115a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611151906140b4565b60405180910390fd5b600581101561119e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161119590614305565b60405180910390fd5b6103e86111a9610f6d565b826111b491906141c4565b6111be9190614232565b60098190555050565b60065481565b600d60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600560159054906101000a900460ff1681565b5f60175f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169050919050565b6112606123f5565b73ffffffffffffffffffffffffffffffffffffffff1661127e6117e3565b73ffffffffffffffffffffffffffffffffffffffff16146112d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112cb906140b4565b60405180910390fd5b6001600e60146101000a81548160ff0219169083151502179055506001600560156101000a81548160ff021916908315150217905550565b6113146123f5565b73ffffffffffffffffffffffffffffffffffffffff166113326117e3565b73ffffffffffffffffffffffffffffffffffffffff1614611388576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161137f906140b4565b60405180910390fd5b80600560156101000a81548160ff02191690831515021790555050565b600d5f9054906101000a900460ff1681565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b6114046123f5565b73ffffffffffffffffffffffffffffffffffffffff166114226117e3565b73ffffffffffffffffffffffffffffffffffffffff1614611478576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161146f906140b4565b60405180910390fd5b6114815f612590565b565b61148b6123f5565b73ffffffffffffffffffffffffffffffffffffffff166114a96117e3565b73ffffffffffffffffffffffffffffffffffffffff16146114ff576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114f6906140b4565b60405180910390fd5b600e5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fd0bdd1bf92049384d44f81d258f51a39b26cfc1d256348efb3b109fd8db7271160405160405180910390a380600e5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60155481565b600a5481565b600f5481565b6115d76123f5565b73ffffffffffffffffffffffffffffffffffffffff166115f56117e3565b73ffffffffffffffffffffffffffffffffffffffff161461164b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611642906140b4565b60405180910390fd5b600d60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f02f8a1483978974a6412ba3a67040b4daa4fc0dfe9439a7295f9a9538394f63560405160405180910390a380600d60016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60075481565b5f61171a6123f5565b73ffffffffffffffffffffffffffffffffffffffff166117386117e3565b73ffffffffffffffffffffffffffffffffffffffff161461178e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611785906140b4565b60405180910390fd5b6006548210156117d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117ca90614393565b60405180910390fd5b8160078190555060019050919050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6118136123f5565b73ffffffffffffffffffffffffffffffffffffffff166118316117e3565b73ffffffffffffffffffffffffffffffffffffffff1614611887576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161187e906140b4565b60405180910390fd5b600d5f9054906101000a900460ff166118d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118cc906143fb565b60405180910390fd5b5f5b838390508110156119705781600c5f8686858181106118f9576118f8614419565b5b905060200201602081019061190e9190613d9b565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550808061196890614446565b9150506118d7565b50505050565b60135481565b60606004805461198b906140ff565b80601f01602080910402602001604051908101604052809291908181526020018280546119b7906140ff565b8015611a025780601f106119d957610100808354040283529160200191611a02565b820191905f5260205f20905b8154815290600101906020018083116119e557829003601f168201915b5050505050905090565b60095481565b611a1a6123f5565b73ffffffffffffffffffffffffffffffffffffffff16611a386117e3565b73ffffffffffffffffffffffffffffffffffffffff1614611a8e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a85906140b4565b60405180910390fd5b7f0000000000000000000000003170056351c973f5d86bed13e6160026ede0b3d873ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611b1c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b13906144fd565b60405180910390fd5b611b268282612653565b5050565b60115481565b611b386123f5565b73ffffffffffffffffffffffffffffffffffffffff16611b566117e3565b73ffffffffffffffffffffffffffffffffffffffff1614611bac576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ba3906140b4565b60405180910390fd5b8160138190555080601481905550601454601354611bca9190614262565b601281905550600c6012541115611c16576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c0d90614565565b60405180910390fd5b5050565b5f80611c246123f5565b90505f611c318286612240565b905083811015611c7c578481856040517fa60f030c000000000000000000000000000000000000000000000000000000008152600401611c7393929190614583565b60405180910390fd5b611c8982868684036123fc565b60019250505092915050565b5f80611c9f6123f5565b9050611cac8185856124a0565b600191505092915050565b6019602052805f5260405f205f915054906101000a900460ff1681565b611cdc6123f5565b73ffffffffffffffffffffffffffffffffffffffff16611cfa6117e3565b73ffffffffffffffffffffffffffffffffffffffff1614611d50576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d47906140b4565b60405180910390fd5b8160108190555080601181905550601154601054611d6e9190614262565b600f81905550600c600f541115611dba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611db190614565565b60405180910390fd5b5050565b60085f9054906101000a900460ff1681565b60105481565b600e5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611e036123f5565b73ffffffffffffffffffffffffffffffffffffffff16611e216117e3565b73ffffffffffffffffffffffffffffffffffffffff1614611e77576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e6e906140b4565b60405180910390fd5b8060175f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f781d26db56cdaee11e2fce438cd1461fa45f059fcd5f02aa8e6b1e5716d8d46582604051611f119190613b69565b60405180910390a25050565b5f611f266123f5565b73ffffffffffffffffffffffffffffffffffffffff16611f446117e3565b73ffffffffffffffffffffffffffffffffffffffff1614611f9a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f91906140b4565b60405180910390fd5b5f60085f6101000a81548160ff0219169083151502179055506001905090565b5f611fc36123f5565b73ffffffffffffffffffffffffffffffffffffffff16611fe16117e3565b73ffffffffffffffffffffffffffffffffffffffff1614612037576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161202e906140b4565b60405180910390fd5b620186a0612043610f6d565b61204d9190614232565b82101561208f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161208690614628565b60405180910390fd5b620186a061209b610f6d565b6101f46120a891906141c4565b6120b29190614232565b8211156120f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120eb906146b6565b60405180910390fd5b600754821115612139576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161213090614744565b60405180910390fd5b8160068190555060019050919050565b60125481565b600c602052805f5260405f205f915054906101000a900460ff1681565b6121746123f5565b73ffffffffffffffffffffffffffffffffffffffff166121926117e3565b73ffffffffffffffffffffffffffffffffffffffff16146121e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121df906140b4565b60405180910390fd5b8060185f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b600e60149054906101000a900460ff1681565b7f0000000000000000000000003170056351c973f5d86bed13e6160026ede0b3d881565b6123016123f5565b73ffffffffffffffffffffffffffffffffffffffff1661231f6117e3565b73ffffffffffffffffffffffffffffffffffffffff1614612375576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161236c906140b4565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036123e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123da906147d2565b60405180910390fd5b6123ec81612590565b50565b60145481565b5f33905090565b61240983838360016126f1565b505050565b5f6124198484612240565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811461249a578181101561248b578281836040517ffb8f41b200000000000000000000000000000000000000000000000000000000815260040161248293929190614583565b60405180910390fd5b61249984848484035f6126f1565b5b50505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612510575f6040517f96c6fd1e0000000000000000000000000000000000000000000000000000000081526004016125079190613e84565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612580575f6040517fec442f050000000000000000000000000000000000000000000000000000000081526004016125779190613e84565b60405180910390fd5b61258b8383836128c0565b505050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8060195f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fee6ce3a11a74f9a94b8a0152fc219acc6645b25bc298e2cae8ec6a520bd83da960405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603612761575f6040517fe602df050000000000000000000000000000000000000000000000000000000081526004016127589190613e84565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036127d1575f6040517f94280d620000000000000000000000000000000000000000000000000000000081526004016127c89190613e84565b60405180910390fd5b8160015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208190555080156128ba578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040516128b19190613b9a565b60405180910390a35b50505050565b5f81036128d7576128d283835f613501565b6134fc565b60085f9054906101000a900460ff1615612f7f576128f36117e3565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561296157506129316117e3565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b801561299957505f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156129d3575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156129ec5750600560149054906101000a900460ff16155b15612f7e57600e60149054906101000a900460ff16612ae05760175f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680612aa0575060175f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b612adf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ad69061483a565b60405180910390fd5b5b600860019054906101000a900460ff1615612ca457612afd6117e3565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614158015612b8457507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612bdc57507f0000000000000000000000003170056351c973f5d86bed13e6160026ede0b3d873ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15612ca35743600b5f3273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205410612c60576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c57906148ee565b60405180910390fd5b43600b5f3273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055505b5b60195f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015612d41575060185f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15612de857600a54811115612d8b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d829061497c565b60405180910390fd5b600954612d97836113b7565b82612da29190614262565b1115612de3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612dda906149e4565b60405180910390fd5b612f7d565b60195f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015612e85575060185f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15612ed457600a54811115612ecf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ec690614a72565b60405180910390fd5b612f7c565b60185f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16612f7b57600954612f2e836113b7565b82612f399190614262565b1115612f7a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f71906149e4565b60405180910390fd5b5b5b5b5b5b5f612f89306113b7565b90505f6006548210159050808015612fad5750600560159054906101000a900460ff165b8015612fc65750600560149054906101000a900460ff16155b8015613019575060195f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b801561306c575060175f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b80156130bf575060175f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15613102576001600560146101000a81548160ff0219169083151502179055506130e761371a565b5f600560146101000a81548160ff0219169083151502179055505b5f600560149054906101000a900460ff1615905060175f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16806131b1575060175f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b156131ba575f90505b60175f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff161580613257575060175f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b156132e757600c5f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16156132e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132dd90614ada565b60405180910390fd5b5b5f81156134ec5760195f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16801561334557505f601254115b156133dd576133726064613364601254886138dd90919063ffffffff16565b6138f290919063ffffffff16565b90506012546014548261338591906141c4565b61338f9190614232565b60165f82825461339f9190614262565b92505081905550601254601354826133b791906141c4565b6133c19190614232565b60155f8282546133d19190614262565b925050819055506134c9565b60195f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16801561343457505f600f54115b156134c8576134616064613453600f54886138dd90919063ffffffff16565b6138f290919063ffffffff16565b9050600f546011548261347491906141c4565b61347e9190614232565b60165f82825461348e9190614262565b92505081905550600f54601054826134a691906141c4565b6134b09190614232565b60155f8282546134c09190614262565b925050819055505b5b5f8111156134dd576134dc873083613501565b5b80856134e99190614af8565b94505b6134f7878787613501565b505050505b505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603613551578060025f8282546135459190614262565b9250508190555061361f565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050818110156135da578381836040517fe450d38c0000000000000000000000000000000000000000000000000000000081526004016135d193929190614583565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550505b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603613666578060025f82825403925050819055506136b0565b805f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161370d9190613b9a565b60405180910390a3505050565b5f613724306113b7565b90505f6016546015546137379190614262565b90505f8083148061374757505f82145b15613754575050506138db565b6007548311156137645760075492505b5f47905061377184613907565b5f6137858247613b3a90919063ffffffff16565b90505f6137af856137a1601654856138dd90919063ffffffff16565b6138f290919063ffffffff16565b90505f6015819055505f601681905550600e5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168160405161380490614b58565b5f6040518083038185875af1925050503d805f811461383e576040519150601f19603f3d011682016040523d82523d5f602084013e613843565b606091505b505080945050600d60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff164760405161388f90614b58565b5f6040518083038185875af1925050503d805f81146138c9576040519150601f19603f3d011682016040523d82523d5f602084013e6138ce565b606091505b5050809450505050505050505b565b5f81836138ea91906141c4565b905092915050565b5f81836138ff9190614232565b905092915050565b5f600267ffffffffffffffff81111561392357613922614b6c565b5b6040519080825280602002602001820160405280156139515781602001602082028036833780820191505090505b50905030815f8151811061396857613967614419565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015613a0b573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613a2f9190614bad565b81600181518110613a4357613a42614419565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050613aa8307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d846123fc565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac947835f8430426040518663ffffffff1660e01b8152600401613b09959493929190614cc8565b5f604051808303815f87803b158015613b20575f80fd5b505af1158015613b32573d5f803e3d5ffd5b505050505050565b5f8183613b479190614af8565b905092915050565b5f8115159050919050565b613b6381613b4f565b82525050565b5f602082019050613b7c5f830184613b5a565b92915050565b5f819050919050565b613b9481613b82565b82525050565b5f602082019050613bad5f830184613b8b565b92915050565b5f81519050919050565b5f82825260208201905092915050565b5f5b83811015613bea578082015181840152602081019050613bcf565b5f8484015250505050565b5f601f19601f8301169050919050565b5f613c0f82613bb3565b613c198185613bbd565b9350613c29818560208601613bcd565b613c3281613bf5565b840191505092915050565b5f6020820190508181035f830152613c558184613c05565b905092915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f819050919050565b5f613c9f613c9a613c9584613c5d565b613c7c565b613c5d565b9050919050565b5f613cb082613c85565b9050919050565b5f613cc182613ca6565b9050919050565b613cd181613cb7565b82525050565b5f602082019050613cea5f830184613cc8565b92915050565b5f80fd5b5f80fd5b5f613d0282613c5d565b9050919050565b613d1281613cf8565b8114613d1c575f80fd5b50565b5f81359050613d2d81613d09565b92915050565b613d3c81613b82565b8114613d46575f80fd5b50565b5f81359050613d5781613d33565b92915050565b5f8060408385031215613d7357613d72613cf0565b5b5f613d8085828601613d1f565b9250506020613d9185828601613d49565b9150509250929050565b5f60208284031215613db057613daf613cf0565b5b5f613dbd84828501613d1f565b91505092915050565b5f60208284031215613ddb57613dda613cf0565b5b5f613de884828501613d49565b91505092915050565b5f805f60608486031215613e0857613e07613cf0565b5b5f613e1586828701613d1f565b9350506020613e2686828701613d1f565b9250506040613e3786828701613d49565b9150509250925092565b5f60ff82169050919050565b613e5681613e41565b82525050565b5f602082019050613e6f5f830184613e4d565b92915050565b613e7e81613cf8565b82525050565b5f602082019050613e975f830184613e75565b92915050565b613ea681613b4f565b8114613eb0575f80fd5b50565b5f81359050613ec181613e9d565b92915050565b5f60208284031215613edc57613edb613cf0565b5b5f613ee984828501613eb3565b91505092915050565b5f80fd5b5f80fd5b5f80fd5b5f8083601f840112613f1357613f12613ef2565b5b8235905067ffffffffffffffff811115613f3057613f2f613ef6565b5b602083019150836020820283011115613f4c57613f4b613efa565b5b9250929050565b5f805f60408486031215613f6a57613f69613cf0565b5b5f84013567ffffffffffffffff811115613f8757613f86613cf4565b5b613f9386828701613efe565b93509350506020613fa686828701613eb3565b9150509250925092565b5f8060408385031215613fc657613fc5613cf0565b5b5f613fd385828601613d1f565b9250506020613fe485828601613eb3565b9150509250929050565b5f806040838503121561400457614003613cf0565b5b5f61401185828601613d49565b925050602061402285828601613d49565b9150509250929050565b5f806040838503121561404257614041613cf0565b5b5f61404f85828601613d1f565b925050602061406085828601613d1f565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f61409e602083613bbd565b91506140a98261406a565b602082019050919050565b5f6020820190508181035f8301526140cb81614092565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061411657607f821691505b602082108103614129576141286140d2565b5b50919050565b7f43616e6e6f7420736574206d61785478206c6f776572207468616e20302e32255f82015250565b5f614163602083613bbd565b915061416e8261412f565b602082019050919050565b5f6020820190508181035f83015261419081614157565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f6141ce82613b82565b91506141d983613b82565b92508282026141e781613b82565b915082820484148315176141fe576141fd614197565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f61423c82613b82565b915061424783613b82565b92508261425757614256614205565b5b828204905092915050565b5f61426c82613b82565b915061427783613b82565b925082820190508082111561428f5761428e614197565b5b92915050565b7f43616e6e6f7420736574206d6178486f6c64206c6f776572207468616e20302e5f8201527f3525000000000000000000000000000000000000000000000000000000000000602082015250565b5f6142ef602283613bbd565b91506142fa82614295565b604082019050919050565b5f6020820190508181035f83015261431c816142e3565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e5f8201527f206d696e42616c616e6365466f72436f6e747261637453656c6c000000000000602082015250565b5f61437d603a83613bbd565b915061438882614323565b604082019050919050565b5f6020820190508181035f8301526143aa81614371565b9050919050565b7f426c61636b6c697374206973206c6f636b6564000000000000000000000000005f82015250565b5f6143e5601383613bbd565b91506143f0826143b1565b602082019050919050565b5f6020820190508181035f830152614412816143d9565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f61445082613b82565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361448257614481614197565b5b600182019050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d205f8201527f6973414d4d506169720000000000000000000000000000000000000000000000602082015250565b5f6144e7602983613bbd565b91506144f28261448d565b604082019050919050565b5f6020820190508181035f830152614514816144db565b9050919050565b7f4d757374206b656570206665657320617420313225206f72206c6573730000005f82015250565b5f61454f601d83613bbd565b915061455a8261451b565b602082019050919050565b5f6020820190508181035f83015261457c81614543565b9050919050565b5f6060820190506145965f830186613e75565b6145a36020830185613b8b565b6145b06040830184613b8b565b949350505050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e5f8201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b5f614612603583613bbd565b915061461d826145b8565b604082019050919050565b5f6020820190508181035f83015261463f81614606565b9050919050565b7f5377617020616d6f756e742063616e6e6f7420626520686967686572207468615f8201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b5f6146a0603483613bbd565b91506146ab82614646565b604082019050919050565b5f6020820190508181035f8301526146cd81614694565b9050919050565b7f5377617020616d6f756e742063616e6e6f7420626520686967686572207468615f8201527f6e206d6178416d6f756e74546f6b656e73466f72436f6e747261637453656c6c602082015250565b5f61472e604083613bbd565b9150614739826146d4565b604082019050919050565b5f6020820190508181035f83015261475b81614722565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f6147bc602683613bbd565b91506147c782614762565b604082019050919050565b5f6020820190508181035f8301526147e9816147b0565b9050919050565b7f54726164696e67206973206e6f74206163746976652e000000000000000000005f82015250565b5f614824601683613bbd565b915061482f826147f0565b602082019050919050565b5f6020820190508181035f83015261485181614818565b9050919050565b7f5f7570646174653a3a205472616e736665722044656c617920656e61626c65645f8201527f2e20204f6e6c79206f6e652070757263686173652070657220626c6f636b206160208201527f6c6c6f7765642e00000000000000000000000000000000000000000000000000604082015250565b5f6148d8604783613bbd565b91506148e382614858565b606082019050919050565b5f6020820190508181035f830152614905816148cc565b9050919050565b7f427579207472616e7366657220616d6f756e74206578636565647320746865205f8201527f6d617854782e0000000000000000000000000000000000000000000000000000602082015250565b5f614966602683613bbd565b91506149718261490c565b604082019050919050565b5f6020820190508181035f8301526149938161495a565b9050919050565b7f4d61782077616c6c6574206578636565646564000000000000000000000000005f82015250565b5f6149ce601383613bbd565b91506149d98261499a565b602082019050919050565b5f6020820190508181035f8301526149fb816149c2565b9050919050565b7f53656c6c207472616e7366657220616d6f756e742065786365656473207468655f8201527f206d617854782e00000000000000000000000000000000000000000000000000602082015250565b5f614a5c602783613bbd565b9150614a6782614a02565b604082019050919050565b5f6020820190508181035f830152614a8981614a50565b9050919050565b7f4164647265737320697320626c61636b6c6973746564000000000000000000005f82015250565b5f614ac4601683613bbd565b9150614acf82614a90565b602082019050919050565b5f6020820190508181035f830152614af181614ab8565b9050919050565b5f614b0282613b82565b9150614b0d83613b82565b9250828203905081811115614b2557614b24614197565b5b92915050565b5f81905092915050565b50565b5f614b435f83614b2b565b9150614b4e82614b35565b5f82019050919050565b5f614b6282614b38565b9150819050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f81519050614ba781613d09565b92915050565b5f60208284031215614bc257614bc1613cf0565b5b5f614bcf84828501614b99565b91505092915050565b5f819050919050565b5f614bfb614bf6614bf184614bd8565b613c7c565b613b82565b9050919050565b614c0b81614be1565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b614c4381613cf8565b82525050565b5f614c548383614c3a565b60208301905092915050565b5f602082019050919050565b5f614c7682614c11565b614c808185614c1b565b9350614c8b83614c2b565b805f5b83811015614cbb578151614ca28882614c49565b9750614cad83614c60565b925050600181019050614c8e565b5085935050505092915050565b5f60a082019050614cdb5f830188613b8b565b614ce86020830187614c02565b8181036040830152614cfa8186614c6c565b9050614d096060830185613e75565b614d166080830184613b8b565b969550505050505056fea2646970667358221220090281cce6ebaf1bddc3b4041a58995c6d44463b8c6a8cbb97254fad2cdef1f364736f6c63430008150033

Deployed Bytecode Sourcemap

26254:16318:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30741:130;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36478:86;;;;;;;;;;;;;:::i;:::-;;27397:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12728:91;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26329:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15021:190;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27575:51;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13830:99;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26675:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32301:188;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;15789:249;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13681:84;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16447:238;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32614:193;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26515:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27023:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26469:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36572:121;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30349:118;;;;;;;;;;;;;:::i;:::-;;33260:113;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26958:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13992:118;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24889:103;;;;;;;;;;;;;:::i;:::-;;35719:173;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27355:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26746:20;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27138:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35396:217;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26562:45;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31797:346;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24238:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36085:318;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27280:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12938:95;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26717:22;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34825:284;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27208:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34022:327;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;17373:504;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14315:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27784:41;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33537:320;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26634:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27172:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27059:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34516:174;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30542:128;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31027:651;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27245:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26908:43;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32993:149;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14560:142;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27096:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26373:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25147:238;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27317:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30741:130;30800:4;24469:12;:10;:12::i;:::-;24458:23;;:7;:5;:7::i;:::-;:23;;;24450:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;30836:5:::1;30817:16;;:24;;;;;;;;;;;;;;;;;;30859:4;30852:11;;30741:130:::0;:::o;36478:86::-;24469:12;:10;:12::i;:::-;24458:23;;:7;:5;:7::i;:::-;:23;;;24450:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;36551:5:::1;36533:15;;:23;;;;;;;;;;;;;;;;;;36478:86::o:0;27397:34::-;;;;:::o;12728:91::-;12773:13;12806:5;12799:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12728:91;:::o;26329:37::-;;;:::o;15021:190::-;15094:4;15111:13;15127:12;:10;:12::i;:::-;15111:28;;15150:31;15159:5;15166:7;15175:5;15150:8;:31::i;:::-;15199:4;15192:11;;;15021:190;;;;:::o;27575:51::-;;;;;;;;;;;;;;;;;;;;;;:::o;13830:99::-;13882:7;13909:12;;13902:19;;13830:99;:::o;26675:35::-;;;;;;;;;;;;;:::o;32301:188::-;24469:12;:10;:12::i;:::-;24458:23;;:7;:5;:7::i;:::-;:23;;;24450:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;32393:1:::1;32383:6;:11;;32375:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;32477:4;32460:13;:11;:13::i;:::-;32451:6;:22;;;;:::i;:::-;32450:31;;;;:::i;:::-;32442:5;:39;;;;32301:188:::0;:::o;15789:249::-;15876:4;15893:15;15911:12;:10;:12::i;:::-;15893:30;;15934:37;15950:4;15956:7;15965:5;15934:15;:37::i;:::-;15982:26;15992:4;15998:2;16002:5;15982:9;:26::i;:::-;16026:4;16019:11;;;15789:249;;;;;:::o;13681:84::-;13730:5;13755:2;13748:9;;13681:84;:::o;16447:238::-;16535:4;16552:13;16568:12;:10;:12::i;:::-;16552:28;;16591:64;16600:5;16607:7;16644:10;16616:25;16626:5;16633:7;16616:9;:25::i;:::-;:38;;;;:::i;:::-;16591:8;:64::i;:::-;16673:4;16666:11;;;16447:238;;;;:::o;32614:193::-;24469:12;:10;:12::i;:::-;24458:23;;:7;:5;:7::i;:::-;:23;;;24450:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;32707:1:::1;32697:6;:11;;32689:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;32795:4;32778:13;:11;:13::i;:::-;32769:6;:22;;;;:::i;:::-;32768:31;;;;:::i;:::-;32758:7;:41;;;;32614:193:::0;:::o;26515:40::-;;;;:::o;27023:29::-;;;;;;;;;;;;;:::o;26469:39::-;;;;;;;;;;;;;:::o;36572:121::-;36638:4;36662:14;:23;36677:7;36662:23;;;;;;;;;;;;;;;;;;;;;;;;;36655:30;;36572:121;;;:::o;30349:118::-;24469:12;:10;:12::i;:::-;24458:23;;:7;:5;:7::i;:::-;:23;;;24450:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;30418:4:::1;30402:13;;:20;;;;;;;;;;;;;;;;;;30455:4;30433:19;;:26;;;;;;;;;;;;;;;;;;30349:118::o:0;33260:113::-;24469:12;:10;:12::i;:::-;24458:23;;:7;:5;:7::i;:::-;:23;;;24450:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;33358:7:::1;33336:19;;:29;;;;;;;;;;;;;;;;;;33260:113:::0;:::o;26958:34::-;;;;;;;;;;;;;:::o;13992:118::-;14057:7;14084:9;:18;14094:7;14084:18;;;;;;;;;;;;;;;;14077:25;;13992:118;;;:::o;24889:103::-;24469:12;:10;:12::i;:::-;24458:23;;:7;:5;:7::i;:::-;:23;;;24450:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;24954:30:::1;24981:1;24954:18;:30::i;:::-;24889:103::o:0;35719:173::-;24469:12;:10;:12::i;:::-;24458:23;;:7;:5;:7::i;:::-;:23;;;24450:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;35834:13:::1;;;;;;;;;;;35802:46;;35823:9;35802:46;;;;;;;;;;;;35875:9;35859:13;;:25;;;;;;;;;;;;;;;;;;35719:173:::0;:::o;27355:35::-;;;;:::o;26746:20::-;;;;:::o;27138:27::-;;;;:::o;35396:217::-;24469:12;:10;:12::i;:::-;24458:23;;:7;:5;:7::i;:::-;:23;;;24450:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;35545:14:::1;;;;;;;;;;;35504:56;;35526:17;35504:56;;;;;;;;;;;;35588:17;35571:14;;:34;;;;;;;;;;;;;;;;;;35396:217:::0;:::o;26562:45::-;;;;:::o;31797:346::-;31897:4;24469:12;:10;:12::i;:::-;24458:23;;:7;:5;:7::i;:::-;:23;;;24450:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;31949:25:::1;;31936:9;:38;;31914:146;;;;;;;;;;;;:::i;:::-;;;;;;;;;32104:9;32071:30;:42;;;;32131:4;32124:11;;31797:346:::0;;;:::o;24238:87::-;24284:7;24311:6;;;;;;;;;;;24304:13;;24238:87;:::o;36085:318::-;24469:12;:10;:12::i;:::-;24458:23;;:7;:5;:7::i;:::-;:23;;;24450:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;36231:15:::1;;;;;;;;;;;36223:47;;;;;;;;;;;;:::i;:::-;;;;;;;;;36286:9;36281:115;36305:9;;:16;;36301:1;:20;36281:115;;;36371:13;36343:11;:25;36355:9;;36365:1;36355:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;36343:25;;;;;;;;;;;;;;;;:41;;;;;;;;;;;;;;;;;;36323:3;;;;;:::i;:::-;;;;36281:115;;;;36085:318:::0;;;:::o;27280:30::-;;;;:::o;12938:95::-;12985:13;13018:7;13011:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12938:95;:::o;26717:22::-;;;;:::o;34825:284::-;24469:12;:10;:12::i;:::-;24458:23;;:7;:5;:7::i;:::-;:23;;;24450:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;34971:7:::1;34963:15;;:4;:15;;::::0;34941:106:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;35060:41;35089:4;35095:5;35060:28;:41::i;:::-;34825:284:::0;;:::o;27208:28::-;;;;:::o;34022:327::-;24469:12;:10;:12::i;:::-;24458:23;;:7;:5;:7::i;:::-;:23;;;24450:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;34159:12:::1;34141:15;:30;;;;34199:11;34182:14;:28;;;;34255:14;;34237:15;;:32;;;;:::i;:::-;34221:13;:48;;;;34305:2;34288:13;;:19;;34280:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;34022:327:::0;;:::o;17373:504::-;17468:4;17485:13;17501:12;:10;:12::i;:::-;17485:28;;17524:24;17551:25;17561:5;17568:7;17551:9;:25::i;:::-;17524:52;;17610:17;17591:16;:36;17587:150;;;17680:7;17689:16;17707:17;17651:74;;;;;;;;;;;;;:::i;:::-;;;;;;;;17587:150;17772:62;17781:5;17788:7;17816:17;17797:16;:36;17772:8;:62::i;:::-;17865:4;17858:11;;;;17373:504;;;;:::o;14315:182::-;14384:4;14401:13;14417:12;:10;:12::i;:::-;14401:28;;14440:27;14450:5;14457:2;14461:5;14440:9;:27::i;:::-;14485:4;14478:11;;;14315:182;;;;:::o;27784:41::-;;;;;;;;;;;;;;;;;;;;;;:::o;33537:320::-;24469:12;:10;:12::i;:::-;24458:23;;:7;:5;:7::i;:::-;:23;;;24450:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;33672:12:::1;33655:14;:29;;;;33711:11;33695:13;:27;;;;33765:13;;33748:14;;:30;;;;:::i;:::-;33733:12;:45;;;;33813:2;33797:12;;:18;;33789:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;33537:320:::0;;:::o;26634:34::-;;;;;;;;;;;;;:::o;27172:29::-;;;;:::o;27059:28::-;;;;;;;;;;;;;:::o;34516:174::-;24469:12;:10;:12::i;:::-;24458:23;;:7;:5;:7::i;:::-;:23;;;24450:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;34627:8:::1;34601:14;:23;34616:7;34601:23;;;;;;;;;;;;;;;;:34;;;;;;;;;;;;;;;;;;34664:7;34651:31;;;34673:8;34651:31;;;;;;:::i;:::-;;;;;;;;34516:174:::0;;:::o;30542:128::-;30600:4;24469:12;:10;:12::i;:::-;24458:23;;:7;:5;:7::i;:::-;:23;;;24450:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;30635:5:::1;30617:15;;:23;;;;;;;;;;;;;;;;;;30658:4;30651:11;;30542:128:::0;:::o;31027:651::-;31121:4;24469:12;:10;:12::i;:::-;24458:23;;:7;:5;:7::i;:::-;:23;;;24450:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;31189:6:::1;31173:13;:11;:13::i;:::-;:22;;;;:::i;:::-;31160:9;:35;;31138:138;;;;;;;;;;;;:::i;:::-;;;;;;;;;31346:6;31329:13;:11;:13::i;:::-;31323:3;:19;;;;:::i;:::-;31322:30;;;;:::i;:::-;31309:9;:43;;31287:145;;;;;;;;;;;;:::i;:::-;;;;;;;;;31478:30;;31465:9;:43;;31443:157;;;;;;;;;;;;:::i;:::-;;;;;;;;;31639:9;31611:25;:37;;;;31666:4;31659:11;;31027:651:::0;;;:::o;27245:28::-;;;;:::o;26908:43::-;;;;;;;;;;;;;;;;;;;;;;:::o;32993:149::-;24469:12;:10;:12::i;:::-;24458:23;;:7;:5;:7::i;:::-;:23;;;24450:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;33130:4:::1;33100:19;:27;33120:6;33100:27;;;;;;;;;;;;;;;;:34;;;;;;;;;;;;;;;;;;32993:149:::0;;:::o;14560:142::-;14640:7;14667:11;:18;14679:5;14667:18;;;;;;;;;;;;;;;:27;14686:7;14667:27;;;;;;;;;;;;;;;;14660:34;;14560:142;;;;:::o;27096:33::-;;;;;;;;;;;;;:::o;26373:32::-;;;:::o;25147:238::-;24469:12;:10;:12::i;:::-;24458:23;;:7;:5;:7::i;:::-;:23;;;24450:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;25270:1:::1;25250:22;;:8;:22;;::::0;25228:110:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;25349:28;25368:8;25349:18;:28::i;:::-;25147:238:::0;:::o;27317:29::-;;;;:::o;9817:98::-;9870:7;9897:10;9890:17;;9817:98;:::o;21570:138::-;21663:37;21672:5;21679:7;21688:5;21695:4;21663:8;:37::i;:::-;21570:138;;;:::o;23307:487::-;23407:24;23434:25;23444:5;23451:7;23434:9;:25::i;:::-;23407:52;;23494:17;23474:16;:37;23470:317;;23551:5;23532:16;:24;23528:132;;;23611:7;23620:16;23638:5;23584:60;;;;;;;;;;;;;:::i;:::-;;;;;;;;23528:132;23703:57;23712:5;23719:7;23747:5;23728:16;:24;23754:5;23703:8;:57::i;:::-;23470:317;23396:398;23307:487;;;:::o;18262:308::-;18362:1;18346:18;;:4;:18;;;18342:88;;18415:1;18388:30;;;;;;;;;;;:::i;:::-;;;;;;;;18342:88;18458:1;18444:16;;:2;:16;;;18440:88;;18513:1;18484:32;;;;;;;;;;;:::i;:::-;;;;;;;;18440:88;18538:24;18546:4;18552:2;18556:5;18538:7;:24::i;:::-;18262:308;;;:::o;25545:191::-;25619:16;25638:6;;;;;;;;;;;25619:25;;25664:8;25655:6;;:17;;;;;;;;;;;;;;;;;;25719:8;25688:40;;25709:8;25688:40;;;;;;;;;;;;25608:128;25545:191;:::o;35117:155::-;35218:5;35200:9;:15;35210:4;35200:15;;;;;;;;;;;;;;;;:23;;;;;;;;;;;;;;;;;;35258:5;35241:23;;35252:4;35241:23;;;;;;;;;;;;35117:155;;:::o;22575:443::-;22705:1;22688:19;;:5;:19;;;22684:91;;22760:1;22731:32;;;;;;;;;;;:::i;:::-;;;;;;;;22684:91;22808:1;22789:21;;:7;:21;;;22785:92;;22862:1;22834:31;;;;;;;;;;;:::i;:::-;;;;;;;;22785:92;22917:5;22887:11;:18;22899:5;22887:18;;;;;;;;;;;;;;;:27;22906:7;22887:27;;;;;;;;;;;;;;;:35;;;;22937:9;22933:78;;;22984:7;22968:31;;22977:5;22968:31;;;22993:5;22968:31;;;;;;:::i;:::-;;;;;;;;22933:78;22575:443;;;;:::o;36701:4297::-;36837:1;36827:6;:11;36823:91;;36855:26;36869:4;36875:2;36879:1;36855:13;:26::i;:::-;36896:7;;36823:91;36930:15;;;;;;;;;;;36926:2240;;;36992:7;:5;:7::i;:::-;36984:15;;:4;:15;;;;:49;;;;;37026:7;:5;:7::i;:::-;37020:13;;:2;:13;;;;36984:49;:86;;;;;37068:1;37054:16;;:2;:16;;;;36984:86;:128;;;;;37105:6;37091:21;;:2;:21;;;;36984:128;:168;;;;;37134:18;;;;;;;;;;;37133:19;36984:168;36962:2193;;;37192:13;;;;;;;;;;;37187:213;;37264:14;:20;37279:4;37264:20;;;;;;;;;;;;;;;;;;;;;;;;;:42;;;;37288:14;:18;37303:2;37288:18;;;;;;;;;;;;;;;;;;;;;;;;;37264:42;37230:150;;;;;;;;;;;;:::i;:::-;;;;;;;;;37187:213;37556:16;;;;;;;;;;;37552:607;;;37633:7;:5;:7::i;:::-;37627:13;;:2;:13;;;;:66;;;;;37683:9;37669:24;;:2;:24;;;;37627:66;:117;;;;;37736:7;37722:22;;:2;:22;;;;37627:117;37597:543;;;37900:12;37833:20;:31;37854:9;37833:31;;;;;;;;;;;;;;;;:79;37795:248;;;;;;;;;;;;:::i;:::-;;;;;;;;;38104:12;38070:20;:31;38091:9;38070:31;;;;;;;;;;;;;;;:46;;;;37597:543;37552:607;38211:9;:15;38221:4;38211:15;;;;;;;;;;;;;;;;;;;;;;;;;:43;;;;;38231:19;:23;38251:2;38231:23;;;;;;;;;;;;;;;;;;;;;;;;;38230:24;38211:43;38207:933;;;38323:5;;38313:6;:15;;38279:139;;;;;;;;;;;;:::i;:::-;;;;;;;;;38501:7;;38484:13;38494:2;38484:9;:13::i;:::-;38475:6;:22;;;;:::i;:::-;:33;;38441:138;;;;;;;;;;;;:::i;:::-;;;;;;;;;38207:933;;;38677:9;:13;38687:2;38677:13;;;;;;;;;;;;;;;;;;;;;;;;;:43;;;;;38695:19;:25;38715:4;38695:25;;;;;;;;;;;;;;;;;;;;;;;;;38694:26;38677:43;38651:489;;;38807:5;;38797:6;:15;;38763:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;38651:489;;;38934:19;:23;38954:2;38934:23;;;;;;;;;;;;;;;;;;;;;;;;;38929:211;;39042:7;;39025:13;39035:2;39025:9;:13::i;:::-;39016:6;:22;;;;:::i;:::-;:33;;38982:138;;;;;;;;;;;;:::i;:::-;;;;;;;;;38929:211;38651:489;38207:933;36962:2193;36926:2240;39178:28;39209:24;39227:4;39209:9;:24::i;:::-;39178:55;;39246:12;39285:25;;39261:20;:49;;39246:64;;39341:7;:43;;;;;39365:19;;;;;;;;;;;39341:43;:79;;;;;39402:18;;;;;;;;;;;39401:19;39341:79;:112;;;;;39438:9;:15;39448:4;39438:15;;;;;;;;;;;;;;;;;;;;;;;;;39437:16;39341:112;:150;;;;;39471:14;:20;39486:4;39471:20;;;;;;;;;;;;;;;;;;;;;;;;;39470:21;39341:150;:186;;;;;39509:14;:18;39524:2;39509:18;;;;;;;;;;;;;;;;;;;;;;;;;39508:19;39341:186;39323:338;;;39575:4;39554:18;;:25;;;;;;;;;;;;;;;;;;39596:10;:8;:10::i;:::-;39644:5;39623:18;;:26;;;;;;;;;;;;;;;;;;39323:338;39673:12;39689:18;;;;;;;;;;;39688:19;39673:34;;39809:14;:20;39824:4;39809:20;;;;;;;;;;;;;;;;;;;;;;;;;:42;;;;39833:14;:18;39848:2;39833:18;;;;;;;;;;;;;;;;;;;;;;;;;39809:42;39805:90;;;39878:5;39868:15;;39805:90;39912:14;:20;39927:4;39912:20;;;;;;;;;;;;;;;;;;;;;;;;;39911:21;:44;;;;39937:14;:18;39952:2;39937:18;;;;;;;;;;;;;;;;;;;;;;;;;39936:19;39911:44;39907:130;;;39981:11;:17;39993:4;39981:17;;;;;;;;;;;;;;;;;;;;;;;;;39980:18;39972:53;;;;;;;;;;;;:::i;:::-;;;;;;;;;39907:130;40049:12;40154:7;40150:797;;;40206:9;:13;40216:2;40206:13;;;;;;;;;;;;;;;;;;;;;;;;;:34;;;;;40239:1;40223:13;;:17;40206:34;40202:598;;;40268:34;40298:3;40268:25;40279:13;;40268:6;:10;;:25;;;;:::i;:::-;:29;;:34;;;;:::i;:::-;40261:41;;40370:13;;40352:14;;40345:4;:21;;;;:::i;:::-;40344:39;;;;:::i;:::-;40321:19;;:62;;;;;;;:::i;:::-;;;;;;;;40453:13;;40434:15;;40427:4;:22;;;;:::i;:::-;40426:40;;;;:::i;:::-;40402:20;;:64;;;;;;;:::i;:::-;;;;;;;;40202:598;;;40528:9;:15;40538:4;40528:15;;;;;;;;;;;;;;;;;;;;;;;;;:35;;;;;40562:1;40547:12;;:16;40528:35;40524:276;;;40591:33;40620:3;40591:24;40602:12;;40591:6;:10;;:24;;;;:::i;:::-;:28;;:33;;;;:::i;:::-;40584:40;;40691:12;;40674:13;;40667:4;:20;;;;:::i;:::-;40666:37;;;;:::i;:::-;40643:19;;:60;;;;;;;:::i;:::-;;;;;;;;40772:12;;40754:14;;40747:4;:21;;;;:::i;:::-;40746:38;;;;:::i;:::-;40722:20;;:62;;;;;;;:::i;:::-;;;;;;;;40524:276;40202:598;40827:1;40820:4;:8;40816:89;;;40849:40;40863:4;40877;40884;40849:13;:40::i;:::-;40816:89;40931:4;40921:14;;;;;:::i;:::-;;;40150:797;40959:31;40973:4;40979:2;40983:6;40959:13;:31::i;:::-;36812:4186;;;;36701:4297;;;;:::o;18886:1135::-;18992:1;18976:18;;:4;:18;;;18972:552;;19130:5;19114:12;;:21;;;;;;;:::i;:::-;;;;;;;;18972:552;;;19168:19;19190:9;:15;19200:4;19190:15;;;;;;;;;;;;;;;;19168:37;;19238:5;19224:11;:19;19220:117;;;19296:4;19302:11;19315:5;19271:50;;;;;;;;;;;;;:::i;:::-;;;;;;;;19220:117;19492:5;19478:11;:19;19460:9;:15;19470:4;19460:15;;;;;;;;;;;;;;;:37;;;;19153:371;18972:552;19554:1;19540:16;;:2;:16;;;19536:435;;19722:5;19706:12;;:21;;;;;;;;;;;19536:435;;;19939:5;19922:9;:13;19932:2;19922:13;;;;;;;;;;;;;;;;:22;;;;;;;;;;;19536:435;20003:2;19988:25;;19997:4;19988:25;;;20007:5;19988:25;;;;;;:::i;:::-;;;;;;;;18886:1135;;;:::o;41585:984::-;41624:23;41650:24;41668:4;41650:9;:24::i;:::-;41624:50;;41685:25;41736:19;;41713:20;;:42;;;;:::i;:::-;41685:70;;41766:12;41814:1;41795:15;:20;:46;;;;41840:1;41819:17;:22;41795:46;41791:85;;;41858:7;;;;;41791:85;41910:30;;41892:15;:48;41888:129;;;41975:30;;41957:48;;41888:129;42029:25;42057:21;42029:49;;42091:33;42108:15;42091:16;:33::i;:::-;42137:18;42158:44;42184:17;42158:21;:25;;:44;;;;:::i;:::-;42137:65;;42215:21;42239:58;42279:17;42239:35;42254:19;;42239:10;:14;;:35;;;;:::i;:::-;:39;;:58;;;;:::i;:::-;42215:82;;42333:1;42310:20;:24;;;;42367:1;42345:19;:23;;;;42403:13;;;;;;;;;;;42395:27;;42430:13;42395:53;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42381:67;;;;;42483:14;;;;;;;;;;;42475:28;;42525:21;42475:86;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42461:100;;;;;41613:956;;;;;;41585:984;:::o;3284:98::-;3342:7;3373:1;3369;:5;;;;:::i;:::-;3362:12;;3284:98;;;;:::o;3683:::-;3741:7;3772:1;3768;:5;;;;:::i;:::-;3761:12;;3683:98;;;;:::o;41006:571::-;41132:21;41170:1;41156:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41132:40;;41201:4;41183;41188:1;41183:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;41227:9;:14;;;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;41217:4;41222:1;41217:7;;;;;;;;:::i;:::-;;;;;;;:26;;;;;;;;;;;41256:56;41273:4;41288:9;41300:11;41256:8;:56::i;:::-;41351:9;:60;;;41426:11;41452:1;41496:4;41523;41543:15;41351:218;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41061:516;41006:571;:::o;2927:98::-;2985:7;3016:1;3012;:5;;;;:::i;:::-;3005:12;;2927:98;;;;:::o;7:90:1:-;41:7;84:5;77:13;70:21;59:32;;7:90;;;:::o;103:109::-;184:21;199:5;184:21;:::i;:::-;179:3;172:34;103:109;;:::o;218:210::-;305:4;343:2;332:9;328:18;320:26;;356:65;418:1;407:9;403:17;394:6;356:65;:::i;:::-;218:210;;;;:::o;434:77::-;471:7;500:5;489:16;;434:77;;;:::o;517:118::-;604:24;622:5;604:24;:::i;:::-;599:3;592:37;517:118;;:::o;641:222::-;734:4;772:2;761:9;757:18;749:26;;785:71;853:1;842:9;838:17;829:6;785:71;:::i;:::-;641:222;;;;:::o;869:99::-;921:6;955:5;949:12;939:22;;869:99;;;:::o;974:169::-;1058:11;1092:6;1087:3;1080:19;1132:4;1127:3;1123:14;1108:29;;974:169;;;;:::o;1149:246::-;1230:1;1240:113;1254:6;1251:1;1248:13;1240:113;;;1339:1;1334:3;1330:11;1324:18;1320:1;1315:3;1311:11;1304:39;1276:2;1273:1;1269:10;1264:15;;1240:113;;;1387:1;1378:6;1373:3;1369:16;1362:27;1211:184;1149:246;;;:::o;1401:102::-;1442:6;1493:2;1489:7;1484:2;1477:5;1473:14;1469:28;1459:38;;1401:102;;;:::o;1509:377::-;1597:3;1625:39;1658:5;1625:39;:::i;:::-;1680:71;1744:6;1739:3;1680:71;:::i;:::-;1673:78;;1760:65;1818:6;1813:3;1806:4;1799:5;1795:16;1760:65;:::i;:::-;1850:29;1872:6;1850:29;:::i;:::-;1845:3;1841:39;1834:46;;1601:285;1509:377;;;;:::o;1892:313::-;2005:4;2043:2;2032:9;2028:18;2020:26;;2092:9;2086:4;2082:20;2078:1;2067:9;2063:17;2056:47;2120:78;2193:4;2184:6;2120:78;:::i;:::-;2112:86;;1892:313;;;;:::o;2211:126::-;2248:7;2288:42;2281:5;2277:54;2266:65;;2211:126;;;:::o;2343:60::-;2371:3;2392:5;2385:12;;2343:60;;;:::o;2409:142::-;2459:9;2492:53;2510:34;2519:24;2537:5;2519:24;:::i;:::-;2510:34;:::i;:::-;2492:53;:::i;:::-;2479:66;;2409:142;;;:::o;2557:126::-;2607:9;2640:37;2671:5;2640:37;:::i;:::-;2627:50;;2557:126;;;:::o;2689:145::-;2758:9;2791:37;2822:5;2791:37;:::i;:::-;2778:50;;2689:145;;;:::o;2840:169::-;2946:56;2996:5;2946:56;:::i;:::-;2941:3;2934:69;2840:169;;:::o;3015:260::-;3127:4;3165:2;3154:9;3150:18;3142:26;;3178:90;3265:1;3254:9;3250:17;3241:6;3178:90;:::i;:::-;3015:260;;;;:::o;3362:117::-;3471:1;3468;3461:12;3485:117;3594:1;3591;3584:12;3608:96;3645:7;3674:24;3692:5;3674:24;:::i;:::-;3663:35;;3608:96;;;:::o;3710:122::-;3783:24;3801:5;3783:24;:::i;:::-;3776:5;3773:35;3763:63;;3822:1;3819;3812:12;3763:63;3710:122;:::o;3838:139::-;3884:5;3922:6;3909:20;3900:29;;3938:33;3965:5;3938:33;:::i;:::-;3838:139;;;;:::o;3983:122::-;4056:24;4074:5;4056:24;:::i;:::-;4049:5;4046:35;4036:63;;4095:1;4092;4085:12;4036:63;3983:122;:::o;4111:139::-;4157:5;4195:6;4182:20;4173:29;;4211:33;4238:5;4211:33;:::i;:::-;4111:139;;;;:::o;4256:474::-;4324:6;4332;4381:2;4369:9;4360:7;4356:23;4352:32;4349:119;;;4387:79;;:::i;:::-;4349:119;4507:1;4532:53;4577:7;4568:6;4557:9;4553:22;4532:53;:::i;:::-;4522:63;;4478:117;4634:2;4660:53;4705:7;4696:6;4685:9;4681:22;4660:53;:::i;:::-;4650:63;;4605:118;4256:474;;;;;:::o;4736:329::-;4795:6;4844:2;4832:9;4823:7;4819:23;4815:32;4812:119;;;4850:79;;:::i;:::-;4812:119;4970:1;4995:53;5040:7;5031:6;5020:9;5016:22;4995:53;:::i;:::-;4985:63;;4941:117;4736:329;;;;:::o;5071:::-;5130:6;5179:2;5167:9;5158:7;5154:23;5150:32;5147:119;;;5185:79;;:::i;:::-;5147:119;5305:1;5330:53;5375:7;5366:6;5355:9;5351:22;5330:53;:::i;:::-;5320:63;;5276:117;5071:329;;;;:::o;5406:619::-;5483:6;5491;5499;5548:2;5536:9;5527:7;5523:23;5519:32;5516:119;;;5554:79;;:::i;:::-;5516:119;5674:1;5699:53;5744:7;5735:6;5724:9;5720:22;5699:53;:::i;:::-;5689:63;;5645:117;5801:2;5827:53;5872:7;5863:6;5852:9;5848:22;5827:53;:::i;:::-;5817:63;;5772:118;5929:2;5955:53;6000:7;5991:6;5980:9;5976:22;5955:53;:::i;:::-;5945:63;;5900:118;5406:619;;;;;:::o;6031:86::-;6066:7;6106:4;6099:5;6095:16;6084:27;;6031:86;;;:::o;6123:112::-;6206:22;6222:5;6206:22;:::i;:::-;6201:3;6194:35;6123:112;;:::o;6241:214::-;6330:4;6368:2;6357:9;6353:18;6345:26;;6381:67;6445:1;6434:9;6430:17;6421:6;6381:67;:::i;:::-;6241:214;;;;:::o;6461:118::-;6548:24;6566:5;6548:24;:::i;:::-;6543:3;6536:37;6461:118;;:::o;6585:222::-;6678:4;6716:2;6705:9;6701:18;6693:26;;6729:71;6797:1;6786:9;6782:17;6773:6;6729:71;:::i;:::-;6585:222;;;;:::o;6813:116::-;6883:21;6898:5;6883:21;:::i;:::-;6876:5;6873:32;6863:60;;6919:1;6916;6909:12;6863:60;6813:116;:::o;6935:133::-;6978:5;7016:6;7003:20;6994:29;;7032:30;7056:5;7032:30;:::i;:::-;6935:133;;;;:::o;7074:323::-;7130:6;7179:2;7167:9;7158:7;7154:23;7150:32;7147:119;;;7185:79;;:::i;:::-;7147:119;7305:1;7330:50;7372:7;7363:6;7352:9;7348:22;7330:50;:::i;:::-;7320:60;;7276:114;7074:323;;;;:::o;7403:117::-;7512:1;7509;7502:12;7526:117;7635:1;7632;7625:12;7649:117;7758:1;7755;7748:12;7789:568;7862:8;7872:6;7922:3;7915:4;7907:6;7903:17;7899:27;7889:122;;7930:79;;:::i;:::-;7889:122;8043:6;8030:20;8020:30;;8073:18;8065:6;8062:30;8059:117;;;8095:79;;:::i;:::-;8059:117;8209:4;8201:6;8197:17;8185:29;;8263:3;8255:4;8247:6;8243:17;8233:8;8229:32;8226:41;8223:128;;;8270:79;;:::i;:::-;8223:128;7789:568;;;;;:::o;8363:698::-;8455:6;8463;8471;8520:2;8508:9;8499:7;8495:23;8491:32;8488:119;;;8526:79;;:::i;:::-;8488:119;8674:1;8663:9;8659:17;8646:31;8704:18;8696:6;8693:30;8690:117;;;8726:79;;:::i;:::-;8690:117;8839:80;8911:7;8902:6;8891:9;8887:22;8839:80;:::i;:::-;8821:98;;;;8617:312;8968:2;8994:50;9036:7;9027:6;9016:9;9012:22;8994:50;:::i;:::-;8984:60;;8939:115;8363:698;;;;;:::o;9067:468::-;9132:6;9140;9189:2;9177:9;9168:7;9164:23;9160:32;9157:119;;;9195:79;;:::i;:::-;9157:119;9315:1;9340:53;9385:7;9376:6;9365:9;9361:22;9340:53;:::i;:::-;9330:63;;9286:117;9442:2;9468:50;9510:7;9501:6;9490:9;9486:22;9468:50;:::i;:::-;9458:60;;9413:115;9067:468;;;;;:::o;9541:474::-;9609:6;9617;9666:2;9654:9;9645:7;9641:23;9637:32;9634:119;;;9672:79;;:::i;:::-;9634:119;9792:1;9817:53;9862:7;9853:6;9842:9;9838:22;9817:53;:::i;:::-;9807:63;;9763:117;9919:2;9945:53;9990:7;9981:6;9970:9;9966:22;9945:53;:::i;:::-;9935:63;;9890:118;9541:474;;;;;:::o;10021:::-;10089:6;10097;10146:2;10134:9;10125:7;10121:23;10117:32;10114:119;;;10152:79;;:::i;:::-;10114:119;10272:1;10297:53;10342:7;10333:6;10322:9;10318:22;10297:53;:::i;:::-;10287:63;;10243:117;10399:2;10425:53;10470:7;10461:6;10450:9;10446:22;10425:53;:::i;:::-;10415:63;;10370:118;10021:474;;;;;:::o;10501:182::-;10641:34;10637:1;10629:6;10625:14;10618:58;10501:182;:::o;10689:366::-;10831:3;10852:67;10916:2;10911:3;10852:67;:::i;:::-;10845:74;;10928:93;11017:3;10928:93;:::i;:::-;11046:2;11041:3;11037:12;11030:19;;10689:366;;;:::o;11061:419::-;11227:4;11265:2;11254:9;11250:18;11242:26;;11314:9;11308:4;11304:20;11300:1;11289:9;11285:17;11278:47;11342:131;11468:4;11342:131;:::i;:::-;11334:139;;11061:419;;;:::o;11486:180::-;11534:77;11531:1;11524:88;11631:4;11628:1;11621:15;11655:4;11652:1;11645:15;11672:320;11716:6;11753:1;11747:4;11743:12;11733:22;;11800:1;11794:4;11790:12;11821:18;11811:81;;11877:4;11869:6;11865:17;11855:27;;11811:81;11939:2;11931:6;11928:14;11908:18;11905:38;11902:84;;11958:18;;:::i;:::-;11902:84;11723:269;11672:320;;;:::o;11998:182::-;12138:34;12134:1;12126:6;12122:14;12115:58;11998:182;:::o;12186:366::-;12328:3;12349:67;12413:2;12408:3;12349:67;:::i;:::-;12342:74;;12425:93;12514:3;12425:93;:::i;:::-;12543:2;12538:3;12534:12;12527:19;;12186:366;;;:::o;12558:419::-;12724:4;12762:2;12751:9;12747:18;12739:26;;12811:9;12805:4;12801:20;12797:1;12786:9;12782:17;12775:47;12839:131;12965:4;12839:131;:::i;:::-;12831:139;;12558:419;;;:::o;12983:180::-;13031:77;13028:1;13021:88;13128:4;13125:1;13118:15;13152:4;13149:1;13142:15;13169:410;13209:7;13232:20;13250:1;13232:20;:::i;:::-;13227:25;;13266:20;13284:1;13266:20;:::i;:::-;13261:25;;13321:1;13318;13314:9;13343:30;13361:11;13343:30;:::i;:::-;13332:41;;13522:1;13513:7;13509:15;13506:1;13503:22;13483:1;13476:9;13456:83;13433:139;;13552:18;;:::i;:::-;13433:139;13217:362;13169:410;;;;:::o;13585:180::-;13633:77;13630:1;13623:88;13730:4;13727:1;13720:15;13754:4;13751:1;13744:15;13771:185;13811:1;13828:20;13846:1;13828:20;:::i;:::-;13823:25;;13862:20;13880:1;13862:20;:::i;:::-;13857:25;;13901:1;13891:35;;13906:18;;:::i;:::-;13891:35;13948:1;13945;13941:9;13936:14;;13771:185;;;;:::o;13962:191::-;14002:3;14021:20;14039:1;14021:20;:::i;:::-;14016:25;;14055:20;14073:1;14055:20;:::i;:::-;14050:25;;14098:1;14095;14091:9;14084:16;;14119:3;14116:1;14113:10;14110:36;;;14126:18;;:::i;:::-;14110:36;13962:191;;;;:::o;14159:221::-;14299:34;14295:1;14287:6;14283:14;14276:58;14368:4;14363:2;14355:6;14351:15;14344:29;14159:221;:::o;14386:366::-;14528:3;14549:67;14613:2;14608:3;14549:67;:::i;:::-;14542:74;;14625:93;14714:3;14625:93;:::i;:::-;14743:2;14738:3;14734:12;14727:19;;14386:366;;;:::o;14758:419::-;14924:4;14962:2;14951:9;14947:18;14939:26;;15011:9;15005:4;15001:20;14997:1;14986:9;14982:17;14975:47;15039:131;15165:4;15039:131;:::i;:::-;15031:139;;14758:419;;;:::o;15183:245::-;15323:34;15319:1;15311:6;15307:14;15300:58;15392:28;15387:2;15379:6;15375:15;15368:53;15183:245;:::o;15434:366::-;15576:3;15597:67;15661:2;15656:3;15597:67;:::i;:::-;15590:74;;15673:93;15762:3;15673:93;:::i;:::-;15791:2;15786:3;15782:12;15775:19;;15434:366;;;:::o;15806:419::-;15972:4;16010:2;15999:9;15995:18;15987:26;;16059:9;16053:4;16049:20;16045:1;16034:9;16030:17;16023:47;16087:131;16213:4;16087:131;:::i;:::-;16079:139;;15806:419;;;:::o;16231:169::-;16371:21;16367:1;16359:6;16355:14;16348:45;16231:169;:::o;16406:366::-;16548:3;16569:67;16633:2;16628:3;16569:67;:::i;:::-;16562:74;;16645:93;16734:3;16645:93;:::i;:::-;16763:2;16758:3;16754:12;16747:19;;16406:366;;;:::o;16778:419::-;16944:4;16982:2;16971:9;16967:18;16959:26;;17031:9;17025:4;17021:20;17017:1;17006:9;17002:17;16995:47;17059:131;17185:4;17059:131;:::i;:::-;17051:139;;16778:419;;;:::o;17203:180::-;17251:77;17248:1;17241:88;17348:4;17345:1;17338:15;17372:4;17369:1;17362:15;17389:233;17428:3;17451:24;17469:5;17451:24;:::i;:::-;17442:33;;17497:66;17490:5;17487:77;17484:103;;17567:18;;:::i;:::-;17484:103;17614:1;17607:5;17603:13;17596:20;;17389:233;;;:::o;17628:228::-;17768:34;17764:1;17756:6;17752:14;17745:58;17837:11;17832:2;17824:6;17820:15;17813:36;17628:228;:::o;17862:366::-;18004:3;18025:67;18089:2;18084:3;18025:67;:::i;:::-;18018:74;;18101:93;18190:3;18101:93;:::i;:::-;18219:2;18214:3;18210:12;18203:19;;17862:366;;;:::o;18234:419::-;18400:4;18438:2;18427:9;18423:18;18415:26;;18487:9;18481:4;18477:20;18473:1;18462:9;18458:17;18451:47;18515:131;18641:4;18515:131;:::i;:::-;18507:139;;18234:419;;;:::o;18659:179::-;18799:31;18795:1;18787:6;18783:14;18776:55;18659:179;:::o;18844:366::-;18986:3;19007:67;19071:2;19066:3;19007:67;:::i;:::-;19000:74;;19083:93;19172:3;19083:93;:::i;:::-;19201:2;19196:3;19192:12;19185:19;;18844:366;;;:::o;19216:419::-;19382:4;19420:2;19409:9;19405:18;19397:26;;19469:9;19463:4;19459:20;19455:1;19444:9;19440:17;19433:47;19497:131;19623:4;19497:131;:::i;:::-;19489:139;;19216:419;;;:::o;19641:442::-;19790:4;19828:2;19817:9;19813:18;19805:26;;19841:71;19909:1;19898:9;19894:17;19885:6;19841:71;:::i;:::-;19922:72;19990:2;19979:9;19975:18;19966:6;19922:72;:::i;:::-;20004;20072:2;20061:9;20057:18;20048:6;20004:72;:::i;:::-;19641:442;;;;;;:::o;20089:240::-;20229:34;20225:1;20217:6;20213:14;20206:58;20298:23;20293:2;20285:6;20281:15;20274:48;20089:240;:::o;20335:366::-;20477:3;20498:67;20562:2;20557:3;20498:67;:::i;:::-;20491:74;;20574:93;20663:3;20574:93;:::i;:::-;20692:2;20687:3;20683:12;20676:19;;20335:366;;;:::o;20707:419::-;20873:4;20911:2;20900:9;20896:18;20888:26;;20960:9;20954:4;20950:20;20946:1;20935:9;20931:17;20924:47;20988:131;21114:4;20988:131;:::i;:::-;20980:139;;20707:419;;;:::o;21132:239::-;21272:34;21268:1;21260:6;21256:14;21249:58;21341:22;21336:2;21328:6;21324:15;21317:47;21132:239;:::o;21377:366::-;21519:3;21540:67;21604:2;21599:3;21540:67;:::i;:::-;21533:74;;21616:93;21705:3;21616:93;:::i;:::-;21734:2;21729:3;21725:12;21718:19;;21377:366;;;:::o;21749:419::-;21915:4;21953:2;21942:9;21938:18;21930:26;;22002:9;21996:4;21992:20;21988:1;21977:9;21973:17;21966:47;22030:131;22156:4;22030:131;:::i;:::-;22022:139;;21749:419;;;:::o;22174:251::-;22314:34;22310:1;22302:6;22298:14;22291:58;22383:34;22378:2;22370:6;22366:15;22359:59;22174:251;:::o;22431:366::-;22573:3;22594:67;22658:2;22653:3;22594:67;:::i;:::-;22587:74;;22670:93;22759:3;22670:93;:::i;:::-;22788:2;22783:3;22779:12;22772:19;;22431:366;;;:::o;22803:419::-;22969:4;23007:2;22996:9;22992:18;22984:26;;23056:9;23050:4;23046:20;23042:1;23031:9;23027:17;23020:47;23084:131;23210:4;23084:131;:::i;:::-;23076:139;;22803:419;;;:::o;23228:225::-;23368:34;23364:1;23356:6;23352:14;23345:58;23437:8;23432:2;23424:6;23420:15;23413:33;23228:225;:::o;23459:366::-;23601:3;23622:67;23686:2;23681:3;23622:67;:::i;:::-;23615:74;;23698:93;23787:3;23698:93;:::i;:::-;23816:2;23811:3;23807:12;23800:19;;23459:366;;;:::o;23831:419::-;23997:4;24035:2;24024:9;24020:18;24012:26;;24084:9;24078:4;24074:20;24070:1;24059:9;24055:17;24048:47;24112:131;24238:4;24112:131;:::i;:::-;24104:139;;23831:419;;;:::o;24256:172::-;24396:24;24392:1;24384:6;24380:14;24373:48;24256:172;:::o;24434:366::-;24576:3;24597:67;24661:2;24656:3;24597:67;:::i;:::-;24590:74;;24673:93;24762:3;24673:93;:::i;:::-;24791:2;24786:3;24782:12;24775:19;;24434:366;;;:::o;24806:419::-;24972:4;25010:2;24999:9;24995:18;24987:26;;25059:9;25053:4;25049:20;25045:1;25034:9;25030:17;25023:47;25087:131;25213:4;25087:131;:::i;:::-;25079:139;;24806:419;;;:::o;25231:295::-;25371:34;25367:1;25359:6;25355:14;25348:58;25440:34;25435:2;25427:6;25423:15;25416:59;25509:9;25504:2;25496:6;25492:15;25485:34;25231:295;:::o;25532:366::-;25674:3;25695:67;25759:2;25754:3;25695:67;:::i;:::-;25688:74;;25771:93;25860:3;25771:93;:::i;:::-;25889:2;25884:3;25880:12;25873:19;;25532:366;;;:::o;25904:419::-;26070:4;26108:2;26097:9;26093:18;26085:26;;26157:9;26151:4;26147:20;26143:1;26132:9;26128:17;26121:47;26185:131;26311:4;26185:131;:::i;:::-;26177:139;;25904:419;;;:::o;26329:225::-;26469:34;26465:1;26457:6;26453:14;26446:58;26538:8;26533:2;26525:6;26521:15;26514:33;26329:225;:::o;26560:366::-;26702:3;26723:67;26787:2;26782:3;26723:67;:::i;:::-;26716:74;;26799:93;26888:3;26799:93;:::i;:::-;26917:2;26912:3;26908:12;26901:19;;26560:366;;;:::o;26932:419::-;27098:4;27136:2;27125:9;27121:18;27113:26;;27185:9;27179:4;27175:20;27171:1;27160:9;27156:17;27149:47;27213:131;27339:4;27213:131;:::i;:::-;27205:139;;26932:419;;;:::o;27357:169::-;27497:21;27493:1;27485:6;27481:14;27474:45;27357:169;:::o;27532:366::-;27674:3;27695:67;27759:2;27754:3;27695:67;:::i;:::-;27688:74;;27771:93;27860:3;27771:93;:::i;:::-;27889:2;27884:3;27880:12;27873:19;;27532:366;;;:::o;27904:419::-;28070:4;28108:2;28097:9;28093:18;28085:26;;28157:9;28151:4;28147:20;28143:1;28132:9;28128:17;28121:47;28185:131;28311:4;28185:131;:::i;:::-;28177:139;;27904:419;;;:::o;28329:226::-;28469:34;28465:1;28457:6;28453:14;28446:58;28538:9;28533:2;28525:6;28521:15;28514:34;28329:226;:::o;28561:366::-;28703:3;28724:67;28788:2;28783:3;28724:67;:::i;:::-;28717:74;;28800:93;28889:3;28800:93;:::i;:::-;28918:2;28913:3;28909:12;28902:19;;28561:366;;;:::o;28933:419::-;29099:4;29137:2;29126:9;29122:18;29114:26;;29186:9;29180:4;29176:20;29172:1;29161:9;29157:17;29150:47;29214:131;29340:4;29214:131;:::i;:::-;29206:139;;28933:419;;;:::o;29358:172::-;29498:24;29494:1;29486:6;29482:14;29475:48;29358:172;:::o;29536:366::-;29678:3;29699:67;29763:2;29758:3;29699:67;:::i;:::-;29692:74;;29775:93;29864:3;29775:93;:::i;:::-;29893:2;29888:3;29884:12;29877:19;;29536:366;;;:::o;29908:419::-;30074:4;30112:2;30101:9;30097:18;30089:26;;30161:9;30155:4;30151:20;30147:1;30136:9;30132:17;30125:47;30189:131;30315:4;30189:131;:::i;:::-;30181:139;;29908:419;;;:::o;30333:194::-;30373:4;30393:20;30411:1;30393:20;:::i;:::-;30388:25;;30427:20;30445:1;30427:20;:::i;:::-;30422:25;;30471:1;30468;30464:9;30456:17;;30495:1;30489:4;30486:11;30483:37;;;30500:18;;:::i;:::-;30483:37;30333:194;;;;:::o;30533:147::-;30634:11;30671:3;30656:18;;30533:147;;;;:::o;30686:114::-;;:::o;30806:398::-;30965:3;30986:83;31067:1;31062:3;30986:83;:::i;:::-;30979:90;;31078:93;31167:3;31078:93;:::i;:::-;31196:1;31191:3;31187:11;31180:18;;30806:398;;;:::o;31210:379::-;31394:3;31416:147;31559:3;31416:147;:::i;:::-;31409:154;;31580:3;31573:10;;31210:379;;;:::o;31595:180::-;31643:77;31640:1;31633:88;31740:4;31737:1;31730:15;31764:4;31761:1;31754:15;31781:143;31838:5;31869:6;31863:13;31854:22;;31885:33;31912:5;31885:33;:::i;:::-;31781:143;;;;:::o;31930:351::-;32000:6;32049:2;32037:9;32028:7;32024:23;32020:32;32017:119;;;32055:79;;:::i;:::-;32017:119;32175:1;32200:64;32256:7;32247:6;32236:9;32232:22;32200:64;:::i;:::-;32190:74;;32146:128;31930:351;;;;:::o;32287:85::-;32332:7;32361:5;32350:16;;32287:85;;;:::o;32378:158::-;32436:9;32469:61;32487:42;32496:32;32522:5;32496:32;:::i;:::-;32487:42;:::i;:::-;32469:61;:::i;:::-;32456:74;;32378:158;;;:::o;32542:147::-;32637:45;32676:5;32637:45;:::i;:::-;32632:3;32625:58;32542:147;;:::o;32695:114::-;32762:6;32796:5;32790:12;32780:22;;32695:114;;;:::o;32815:184::-;32914:11;32948:6;32943:3;32936:19;32988:4;32983:3;32979:14;32964:29;;32815:184;;;;:::o;33005:132::-;33072:4;33095:3;33087:11;;33125:4;33120:3;33116:14;33108:22;;33005:132;;;:::o;33143:108::-;33220:24;33238:5;33220:24;:::i;:::-;33215:3;33208:37;33143:108;;:::o;33257:179::-;33326:10;33347:46;33389:3;33381:6;33347:46;:::i;:::-;33425:4;33420:3;33416:14;33402:28;;33257:179;;;;:::o;33442:113::-;33512:4;33544;33539:3;33535:14;33527:22;;33442:113;;;:::o;33591:732::-;33710:3;33739:54;33787:5;33739:54;:::i;:::-;33809:86;33888:6;33883:3;33809:86;:::i;:::-;33802:93;;33919:56;33969:5;33919:56;:::i;:::-;33998:7;34029:1;34014:284;34039:6;34036:1;34033:13;34014:284;;;34115:6;34109:13;34142:63;34201:3;34186:13;34142:63;:::i;:::-;34135:70;;34228:60;34281:6;34228:60;:::i;:::-;34218:70;;34074:224;34061:1;34058;34054:9;34049:14;;34014:284;;;34018:14;34314:3;34307:10;;33715:608;;;33591:732;;;;:::o;34329:831::-;34592:4;34630:3;34619:9;34615:19;34607:27;;34644:71;34712:1;34701:9;34697:17;34688:6;34644:71;:::i;:::-;34725:80;34801:2;34790:9;34786:18;34777:6;34725:80;:::i;:::-;34852:9;34846:4;34842:20;34837:2;34826:9;34822:18;34815:48;34880:108;34983:4;34974:6;34880:108;:::i;:::-;34872:116;;34998:72;35066:2;35055:9;35051:18;35042:6;34998:72;:::i;:::-;35080:73;35148:3;35137:9;35133:19;35124:6;35080:73;:::i;:::-;34329:831;;;;;;;;:::o

Swarm Source

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