ETH Price: $3,414.65 (+6.97%)
Gas: 17 Gwei

Token

Emoji Rally (RALLY)
 

Overview

Max Total Supply

943,784.182638958191016405 RALLY

Holders

356

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
0.000000000000047733 RALLY

Value
$0.00
0x3ed7ad450d6c068831a52dba5cb80723ac8748c8
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:
EmojiRally

Compiler Version
v0.8.20+commit.a1b79de6

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

// SPDX-License-Identifier: MIT

/**
Buckle up and get ready to feel the pulse-pounding excitement of a race like never before! 
Get the rush of race betting right to your fingertips through the Emoji Rally telegram bot, a 
fair application that lets you place your bets, pick your Emoji Racer, and win crypto if you are the fastest.

https://t.me/emojirally
https://twitter.com/Emoji_Rally
https://emojirally.lol/

*/

pragma solidity 0.8.20;
pragma experimental ABIEncoderV2;

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

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

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

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

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

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

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

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

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

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

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

/* pragma solidity ^0.8.0; */

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

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

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

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

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

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

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

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

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

/* pragma solidity ^0.8.0; */

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

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

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

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

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

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

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

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

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

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

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

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

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

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

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

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

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

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

        return true;
    }

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

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

        return true;
    }

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

        _beforeTokenTransfer(sender, recipient, amount);

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

        emit Transfer(sender, recipient, amount);

        _afterTokenTransfer(sender, recipient, amount);
    }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    function feeTo() external view returns (address);

    function feeToSetter() external view returns (address);

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

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

    function allPairsLength() external view returns (uint256);

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

    function setFeeTo(address) external;

    function setFeeToSetter(address) external;
}

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

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

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

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

    function decimals() external pure returns (uint8);

    function totalSupply() external view returns (uint256);

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

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

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

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

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

    function DOMAIN_SEPARATOR() external view returns (bytes32);

    function PERMIT_TYPEHASH() external pure returns (bytes32);

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

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

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

    function MINIMUM_LIQUIDITY() external pure returns (uint256);

    function factory() external view returns (address);

    function token0() external view returns (address);

    function token1() external view returns (address);

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

    function price0CumulativeLast() external view returns (uint256);

    function price1CumulativeLast() external view returns (uint256);

    function kLast() external view returns (uint256);

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

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

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

    function skim(address to) external;

    function sync() external;

    function initialize(address, address) external;
}

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

    function WETH() external pure returns (address);

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

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

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

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

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

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

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

    bool private swapping;

    address public revShareWallet;
    address public teamWallet;

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

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

    bool public blacklistRenounced = false;

    // Anti-bot and anti-whale mappings and variables
    mapping(address => bool) blacklisted;

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

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

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

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

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

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

    bool public preMigrationPhase = true;
    mapping(address => bool) public preMigrationTransferrable;

    event TokensBurned(address indexed burner, uint256 amount);

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

    event ExcludeFromFees(address indexed account, bool isExcluded);

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

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

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

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

    constructor() ERC20("Emoji Rally", "RALLY") {
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(
            0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D
        );

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

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

        uint256 _buyRevShareFee = 7;
        uint256 _buyLiquidityFee = 1;
        uint256 _buyTeamFee = 7;

        uint256 _sellRevShareFee = 7;
        uint256 _sellLiquidityFee = 1;
        uint256 _sellTeamFee = 12;

        uint256 totalSupply = 1_000_000 * 1e18;

        maxTransactionAmount = 20_000 * 1e18; // 2%
        maxWallet = 20_000 * 1e18; // 2% 
        swapTokensAtAmount = (totalSupply * 5) / 10000; // 0.05% 

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

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

        revShareWallet = address(0x5Ca51105F3730132BCA5076089F74376991a1966);
        teamWallet = owner(); 

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

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

        preMigrationTransferrable[owner()] = true;

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

    receive() external payable {}

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

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

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

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

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

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

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

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

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

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

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

        _setAutomatedMarketMakerPair(pair, value);
    }

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

        emit SetAutomatedMarketMakerPair(pair, value);
    }

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

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

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

    function isBlacklisted(address account) public view returns (bool) {
        return blacklisted[account];
    }

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

        if (preMigrationPhase) {
            require(preMigrationTransferrable[from], "Not authorized to transfer pre-migration.");
        }

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

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

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

        uint256 contractTokenBalance = balanceOf(address(this));

        bool canSwap = contractTokenBalance >= swapTokensAtAmount;

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

            swapBack();

            swapping = false;
        }

        bool takeFee = !swapping;

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

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

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

            amount -= fees;
        }

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

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

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

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

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

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

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

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

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

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

        uint256 initialETHBalance = address(this).balance;

        swapTokensForEth(amountToSwapForETH);

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

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

        uint256 ethForLiquidity = ethBalance - ethForRevShare - ethForTeam;

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

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

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

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

    function withdrawStuckEth() external {
        require(address(this).balance > 0, "No ETH to withdraw");
        (bool success, ) = teamWallet.call{
            value: address(this).balance
        }("");
        require(success, "Transfer failed");
    }

    // @dev team renounce blacklist commands
    function renounceBlacklist() public onlyOwner {
        blacklistRenounced = true;
    }

    function blacklist(address _addr) public onlyOwner {
        require(!blacklistRenounced, "Team has revoked blacklist rights");
        require(
            _addr != address(uniswapV2Pair) && _addr != address(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D), 
            "Cannot blacklist token's v2 router or v2 pool."
        );
        blacklisted[_addr] = true;
    }

    // @dev unblacklist address; not affected by blacklistRenounced incase team wants to unblacklist v3 pools down the road
    function unblacklist(address _addr) public onlyOwner {
        blacklisted[_addr] = false;
    }

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

    function burnRALLY(uint256 amount) external {
    require(amount > 0, "Amount must be greater than 0");

    // Transfer tokens from the caller to this contract
    _transfer(_msgSender(), address(this), amount);

    // Burn the tokens from this contract's balance
    _burn(address(this), amount);

    emit TokensBurned(_msgSender(), amount);
    }
}

Contract Security Audit

Contract ABI

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

60c06040526001600b5f6101000a81548160ff0219169083151502179055505f600b60016101000a81548160ff0219169083151502179055505f600b60026101000a81548160ff0219169083151502179055505f600b60036101000a81548160ff0219169083151502179055506001601b5f6101000a81548160ff02191690831515021790555034801562000092575f80fd5b506040518060400160405280600b81526020017f456d6f6a692052616c6c790000000000000000000000000000000000000000008152506040518060400160405280600581526020017f52414c4c59000000000000000000000000000000000000000000000000000000815250816003908162000110919062000d90565b50806004908162000122919062000d90565b50505062000145620001396200060460201b60201c565b6200060b60201b60201c565b5f737a250d5630b4cf539739df2c5dacb4c659f2488d905062000170816001620006ce60201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001ee573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062000214919062000ed9565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200027a573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620002a0919062000ed9565b6040518363ffffffff1660e01b8152600401620002bf92919062000f1a565b6020604051808303815f875af1158015620002dc573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062000302919062000ed9565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff16815250506200034a60a0516001620006ce60201b60201c565b6200035f60a0516001620007b560201b60201c565b5f600790505f600190505f600790505f600790505f600190505f600c90505f69d3c21bcecceda1000000905069043c33c193756480000060088190555069043c33c1937564800000600a81905550612710600582620003bf919062000f72565b620003cb919062000fe9565b60098190555086600e8190555085600f8190555084601081905550601054600f54600e54620003fb919062001020565b62000407919062001020565b600d8190555083601281905550826013819055508160148190555060145460135460125462000437919062001020565b62000443919062001020565b601181905550735ca51105f3730132bca5076089f74376991a196660065f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620004ad6200085360201b60201c565b60075f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506200050e620005006200085360201b60201c565b60016200087b60201b60201c565b620005213060016200087b60201b60201c565b6200053661dead60016200087b60201b60201c565b620005586200054a6200085360201b60201c565b6001620006ce60201b60201c565b6200056b306001620006ce60201b60201c565b6200058061dead6001620006ce60201b60201c565b6001601c5f620005956200085360201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550620005f63382620009b260201b60201c565b5050505050505050620011a9565b5f33905090565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b620006de6200060460201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620007046200085360201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16146200075d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200075490620010b8565b60405180910390fd5b8060195f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b80601a5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6200088b6200060460201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620008b16200085360201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16146200090a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200090190620010b8565b60405180910390fd5b8060185f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051620009a69190620010f4565b60405180910390a25050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362000a23576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000a1a906200115d565b60405180910390fd5b62000a365f838362000b2260201b60201c565b8060025f82825462000a49919062001020565b92505081905550805f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825462000a9d919062001020565b925050819055508173ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000b0391906200118e565b60405180910390a362000b1e5f838362000b2760201b60201c565b5050565b505050565b505050565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168062000ba857607f821691505b60208210810362000bbe5762000bbd62000b63565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f6008830262000c227fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000be5565b62000c2e868362000be5565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f62000c7862000c7262000c6c8462000c46565b62000c4f565b62000c46565b9050919050565b5f819050919050565b62000c938362000c58565b62000cab62000ca28262000c7f565b84845462000bf1565b825550505050565b5f90565b62000cc162000cb3565b62000cce81848462000c88565b505050565b5b8181101562000cf55762000ce95f8262000cb7565b60018101905062000cd4565b5050565b601f82111562000d445762000d0e8162000bc4565b62000d198462000bd6565b8101602085101562000d29578190505b62000d4162000d388562000bd6565b83018262000cd3565b50505b505050565b5f82821c905092915050565b5f62000d665f198460080262000d49565b1980831691505092915050565b5f62000d80838362000d55565b9150826002028217905092915050565b62000d9b8262000b2c565b67ffffffffffffffff81111562000db75762000db662000b36565b5b62000dc3825462000b90565b62000dd082828562000cf9565b5f60209050601f83116001811462000e06575f841562000df1578287015190505b62000dfd858262000d73565b86555062000e6c565b601f19841662000e168662000bc4565b5f5b8281101562000e3f5784890151825560018201915060208501945060208101905062000e18565b8683101562000e5f578489015162000e5b601f89168262000d55565b8355505b6001600288020188555050505b505050505050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f62000ea38262000e78565b9050919050565b62000eb58162000e97565b811462000ec0575f80fd5b50565b5f8151905062000ed38162000eaa565b92915050565b5f6020828403121562000ef15762000ef062000e74565b5b5f62000f008482850162000ec3565b91505092915050565b62000f148162000e97565b82525050565b5f60408201905062000f2f5f83018562000f09565b62000f3e602083018462000f09565b9392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f62000f7e8262000c46565b915062000f8b8362000c46565b925082820262000f9b8162000c46565b9150828204841483151762000fb55762000fb462000f45565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f62000ff58262000c46565b9150620010028362000c46565b92508262001015576200101462000fbc565b5b828204905092915050565b5f6200102c8262000c46565b9150620010398362000c46565b925082820190508082111562001054576200105362000f45565b5b92915050565b5f82825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f620010a06020836200105a565b9150620010ad826200106a565b602082019050919050565b5f6020820190508181035f830152620010d18162001092565b9050919050565b5f8115159050919050565b620010ee81620010d8565b82525050565b5f602082019050620011095f830184620010e3565b92915050565b7f45524332303a206d696e7420746f20746865207a65726f2061646472657373005f82015250565b5f62001145601f836200105a565b915062001152826200110f565b602082019050919050565b5f6020820190508181035f830152620011768162001137565b9050919050565b620011888162000c46565b82525050565b5f602082019050620011a35f8301846200117d565b92915050565b60805160a051615c83620011fc5f395f818161124f01528181611d97015261288001525f8181610f470152818161419e0152818161427d015281816142a40152818161433a01526143610152615c835ff3fe6080604052600436106103b0575f3560e01c80637cb332bb116101e6578063c02466681161010c578063e2f456051161009f578063f8b45b051161006e578063f8b45b0514610dab578063f9f92be414610dd5578063fde83a3414610dfd578063fe575a8714610e27576103b7565b8063e2f4560514610d05578063f11a24d314610d2f578063f2fde38b14610d59578063f637434214610d81576103b7565b8063d257b34f116100db578063d257b34f14610c39578063d729715f14610c75578063d85ba06314610c9f578063dd62ed3e14610cc9576103b7565b8063c024666814610b97578063c17b5b8c14610bbf578063c18bc19514610be7578063c8c8ebe414610c0f576103b7565b80639a7a23d611610184578063aa0e438811610153578063aa0e438814610ae1578063adee28ff14610b09578063b62496f514610b31578063bbc0c74214610b6d576103b7565b80639a7a23d614610a175780639c2e4ac614610a3f578063a457c2d714610a69578063a9059cbb14610aa5576103b7565b80638a8c523c116101c05780638a8c523c146109855780638da5cb5b1461099b578063924de9b7146109c557806395d89b41146109ed576103b7565b80637cb332bb1461091f5780637fa787ba146109475780638095d5641461095d576103b7565b80633dc599ff116102d65780636a486a8e11610269578063751039fc11610238578063751039fc1461087b5780637571336a146108a557806375e3661e146108cd578063782c4e99146108f5576103b7565b80636a486a8e146107d55780636ddd1713146107ff57806370a0823114610829578063715018a614610865576103b7565b80634fbee193116102a55780634fbee19314610731578063599270441461076d5780635f1893611461079757806360c44a38146107ad576103b7565b80633dc599ff1461067757806349bd5a5e146106a15780634a62bb65146106cb5780634e29e523146106f5576103b7565b806319eab0421161034e57806324b9f3c11161031d57806324b9f3c1146105bd57806327c8f835146105e7578063313ce56714610611578063395093511461063b576103b7565b806319eab042146105055780631a8145bb1461052f578063203e727e1461055957806323b872dd14610581576103b7565b806310d5de531161038a57806310d5de531461044b578063156c2f35146104875780631694505e146104b157806318160ddd146104db576103b7565b806306fdde03146103bb578063095ea7b3146103e55780630e922ca714610421576103b7565b366103b757005b5f80fd5b3480156103c6575f80fd5b506103cf610e63565b6040516103dc919061449c565b60405180910390f35b3480156103f0575f80fd5b5061040b6004803603810190610406919061454d565b610ef3565b60405161041891906145a5565b60405180910390f35b34801561042c575f80fd5b50610435610f10565b60405161044291906145a5565b60405180910390f35b348015610456575f80fd5b50610471600480360381019061046c91906145be565b610f22565b60405161047e91906145a5565b60405180910390f35b348015610492575f80fd5b5061049b610f3f565b6040516104a891906145f8565b60405180910390f35b3480156104bc575f80fd5b506104c5610f45565b6040516104d2919061466c565b60405180910390f35b3480156104e6575f80fd5b506104ef610f69565b6040516104fc91906145f8565b60405180910390f35b348015610510575f80fd5b50610519610f72565b60405161052691906145f8565b60405180910390f35b34801561053a575f80fd5b50610543610f78565b60405161055091906145f8565b60405180910390f35b348015610564575f80fd5b5061057f600480360381019061057a9190614685565b610f7e565b005b34801561058c575f80fd5b506105a760048036038101906105a291906146b0565b61108d565b6040516105b491906145a5565b60405180910390f35b3480156105c8575f80fd5b506105d161117f565b6040516105de91906145f8565b60405180910390f35b3480156105f2575f80fd5b506105fb611185565b604051610608919061470f565b60405180910390f35b34801561061c575f80fd5b5061062561118b565b6040516106329190614743565b60405180910390f35b348015610646575f80fd5b50610661600480360381019061065c919061454d565b611193565b60405161066e91906145a5565b60405180910390f35b348015610682575f80fd5b5061068b61123a565b60405161069891906145a5565b60405180910390f35b3480156106ac575f80fd5b506106b561124d565b6040516106c2919061470f565b60405180910390f35b3480156106d6575f80fd5b506106df611271565b6040516106ec91906145a5565b60405180910390f35b348015610700575f80fd5b5061071b600480360381019061071691906145be565b611283565b60405161072891906145a5565b60405180910390f35b34801561073c575f80fd5b50610757600480360381019061075291906145be565b6112a0565b60405161076491906145a5565b60405180910390f35b348015610778575f80fd5b506107816112f2565b60405161078e919061470f565b60405180910390f35b3480156107a2575f80fd5b506107ab611317565b005b3480156107b8575f80fd5b506107d360048036038101906107ce9190614685565b6113b0565b005b3480156107e0575f80fd5b506107e9611466565b6040516107f691906145f8565b60405180910390f35b34801561080a575f80fd5b5061081361146c565b60405161082091906145a5565b60405180910390f35b348015610834575f80fd5b5061084f600480360381019061084a91906145be565b61147f565b60405161085c91906145f8565b60405180910390f35b348015610870575f80fd5b506108796114c4565b005b348015610886575f80fd5b5061088f61154b565b60405161089c91906145a5565b60405180910390f35b3480156108b0575f80fd5b506108cb60048036038101906108c69190614786565b6115e8565b005b3480156108d8575f80fd5b506108f360048036038101906108ee91906145be565b6116bc565b005b348015610900575f80fd5b5061090961178f565b604051610916919061470f565b60405180910390f35b34801561092a575f80fd5b50610945600480360381019061094091906145be565b6117b4565b005b348015610952575f80fd5b5061095b6118ee565b005b348015610968575f80fd5b50610983600480360381019061097e91906147c4565b6119fc565b005b348015610990575f80fd5b50610999611afb565b005b3480156109a6575f80fd5b506109af611bc8565b6040516109bc919061470f565b60405180910390f35b3480156109d0575f80fd5b506109eb60048036038101906109e69190614814565b611bf0565b005b3480156109f8575f80fd5b50610a01611c89565b604051610a0e919061449c565b60405180910390f35b348015610a22575f80fd5b50610a3d6004803603810190610a389190614786565b611d19565b005b348015610a4a575f80fd5b50610a53611e31565b604051610a6091906145f8565b60405180910390f35b348015610a74575f80fd5b50610a8f6004803603810190610a8a919061454d565b611e37565b604051610a9c91906145a5565b60405180910390f35b348015610ab0575f80fd5b50610acb6004803603810190610ac6919061454d565b611f1d565b604051610ad891906145a5565b60405180910390f35b348015610aec575f80fd5b50610b076004803603810190610b029190614786565b611f3a565b005b348015610b14575f80fd5b50610b2f6004803603810190610b2a91906145be565b612022565b005b348015610b3c575f80fd5b50610b576004803603810190610b5291906145be565b61215c565b604051610b6491906145a5565b60405180910390f35b348015610b78575f80fd5b50610b81612179565b604051610b8e91906145a5565b60405180910390f35b348015610ba2575f80fd5b50610bbd6004803603810190610bb89190614786565b61218c565b005b348015610bca575f80fd5b50610be56004803603810190610be091906147c4565b6122ae565b005b348015610bf2575f80fd5b50610c0d6004803603810190610c089190614685565b6123ad565b005b348015610c1a575f80fd5b50610c236124bc565b604051610c3091906145f8565b60405180910390f35b348015610c44575f80fd5b50610c5f6004803603810190610c5a9190614685565b6124c2565b604051610c6c91906145a5565b60405180910390f35b348015610c80575f80fd5b50610c89612616565b604051610c9691906145f8565b60405180910390f35b348015610caa575f80fd5b50610cb361261c565b604051610cc091906145f8565b60405180910390f35b348015610cd4575f80fd5b50610cef6004803603810190610cea919061483f565b612622565b604051610cfc91906145f8565b60405180910390f35b348015610d10575f80fd5b50610d196126a4565b604051610d2691906145f8565b60405180910390f35b348015610d3a575f80fd5b50610d436126aa565b604051610d5091906145f8565b60405180910390f35b348015610d64575f80fd5b50610d7f6004803603810190610d7a91906145be565b6126b0565b005b348015610d8c575f80fd5b50610d956127a6565b604051610da291906145f8565b60405180910390f35b348015610db6575f80fd5b50610dbf6127ac565b604051610dcc91906145f8565b60405180910390f35b348015610de0575f80fd5b50610dfb6004803603810190610df691906145be565b6127b2565b005b348015610e08575f80fd5b50610e116129b1565b604051610e1e91906145f8565b60405180910390f35b348015610e32575f80fd5b50610e4d6004803603810190610e4891906145be565b6129b7565b604051610e5a91906145a5565b60405180910390f35b606060038054610e72906148aa565b80601f0160208091040260200160405190810160405280929190818152602001828054610e9e906148aa565b8015610ee95780601f10610ec057610100808354040283529160200191610ee9565b820191905f5260205f20905b815481529060010190602001808311610ecc57829003601f168201915b5050505050905090565b5f610f06610eff612a09565b8484612a10565b6001905092915050565b601b5f9054906101000a900460ff1681565b6019602052805f5260405f205f915054906101000a900460ff1681565b600e5481565b7f000000000000000000000000000000000000000000000000000000000000000081565b5f600254905090565b60125481565b60165481565b610f86612a09565b73ffffffffffffffffffffffffffffffffffffffff16610fa4611bc8565b73ffffffffffffffffffffffffffffffffffffffff1614610ffa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ff190614924565b60405180910390fd5b670de0b6b3a76400006103e86005611010610f69565b61101a919061496f565b61102491906149dd565b61102e91906149dd565b811015611070576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161106790614a7d565b60405180910390fd5b670de0b6b3a764000081611084919061496f565b60088190555050565b5f611099848484612bd3565b5f60015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6110e0612a09565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205490508281101561115f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161115690614b0b565b60405180910390fd5b6111738561116b612a09565b858403612a10565b60019150509392505050565b60155481565b61dead81565b5f6012905090565b5f61123061119f612a09565b848460015f6111ac612a09565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205461122b9190614b29565b612a10565b6001905092915050565b600b60039054906101000a900460ff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b600b5f9054906101000a900460ff1681565b601c602052805f5260405f205f915054906101000a900460ff1681565b5f60185f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169050919050565b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61131f612a09565b73ffffffffffffffffffffffffffffffffffffffff1661133d611bc8565b73ffffffffffffffffffffffffffffffffffffffff1614611393576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161138a90614924565b60405180910390fd5b6001600b60036101000a81548160ff021916908315150217905550565b5f81116113f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113e990614ba6565b60405180910390fd5b6114046113fd612a09565b3083612bd3565b61140e3082613815565b611416612a09565b73ffffffffffffffffffffffffffffffffffffffff167ffd38818f5291bf0bb3a2a48aadc06ba8757865d1dabd804585338aab3009dcb68260405161145b91906145f8565b60405180910390a250565b60115481565b600b60029054906101000a900460ff1681565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b6114cc612a09565b73ffffffffffffffffffffffffffffffffffffffff166114ea611bc8565b73ffffffffffffffffffffffffffffffffffffffff1614611540576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161153790614924565b60405180910390fd5b6115495f6139e1565b565b5f611554612a09565b73ffffffffffffffffffffffffffffffffffffffff16611572611bc8565b73ffffffffffffffffffffffffffffffffffffffff16146115c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115bf90614924565b60405180910390fd5b5f600b5f6101000a81548160ff0219169083151502179055506001905090565b6115f0612a09565b73ffffffffffffffffffffffffffffffffffffffff1661160e611bc8565b73ffffffffffffffffffffffffffffffffffffffff1614611664576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161165b90614924565b60405180910390fd5b8060195f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b6116c4612a09565b73ffffffffffffffffffffffffffffffffffffffff166116e2611bc8565b73ffffffffffffffffffffffffffffffffffffffff1614611738576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161172f90614924565b60405180910390fd5b5f600c5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff02191690831515021790555050565b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6117bc612a09565b73ffffffffffffffffffffffffffffffffffffffff166117da611bc8565b73ffffffffffffffffffffffffffffffffffffffff1614611830576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161182790614924565b60405180910390fd5b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8aa0f85050aca99be43beb823e0457e77966b3baf697a289b03681978f96166860405160405180910390a38060075f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b5f4711611930576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161192790614c0e565b60405180910390fd5b5f60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff164760405161197690614c59565b5f6040518083038185875af1925050503d805f81146119b0576040519150601f19603f3d011682016040523d82523d5f602084013e6119b5565b606091505b50509050806119f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119f090614cb7565b60405180910390fd5b50565b611a04612a09565b73ffffffffffffffffffffffffffffffffffffffff16611a22611bc8565b73ffffffffffffffffffffffffffffffffffffffff1614611a78576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a6f90614924565b60405180910390fd5b82600e8190555081600f8190555080601081905550601054600f54600e54611aa09190614b29565b611aaa9190614b29565b600d819055506005600d541115611af6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aed90614d1f565b60405180910390fd5b505050565b611b03612a09565b73ffffffffffffffffffffffffffffffffffffffff16611b21611bc8565b73ffffffffffffffffffffffffffffffffffffffff1614611b77576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b6e90614924565b60405180910390fd5b6001600b60016101000a81548160ff0219169083151502179055506001600b60026101000a81548160ff0219169083151502179055505f601b5f6101000a81548160ff021916908315150217905550565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611bf8612a09565b73ffffffffffffffffffffffffffffffffffffffff16611c16611bc8565b73ffffffffffffffffffffffffffffffffffffffff1614611c6c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c6390614924565b60405180910390fd5b80600b60026101000a81548160ff02191690831515021790555050565b606060048054611c98906148aa565b80601f0160208091040260200160405190810160405280929190818152602001828054611cc4906148aa565b8015611d0f5780601f10611ce657610100808354040283529160200191611d0f565b820191905f5260205f20905b815481529060010190602001808311611cf257829003601f168201915b5050505050905090565b611d21612a09565b73ffffffffffffffffffffffffffffffffffffffff16611d3f611bc8565b73ffffffffffffffffffffffffffffffffffffffff1614611d95576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d8c90614924565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611e23576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e1a90614dad565b60405180910390fd5b611e2d8282613aa4565b5050565b60105481565b5f8060015f611e44612a09565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905082811015611efe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ef590614e3b565b60405180910390fd5b611f12611f09612a09565b85858403612a10565b600191505092915050565b5f611f30611f29612a09565b8484612bd3565b6001905092915050565b611f42612a09565b73ffffffffffffffffffffffffffffffffffffffff16611f60611bc8565b73ffffffffffffffffffffffffffffffffffffffff1614611fb6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fad90614924565b60405180910390fd5b80601c5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550612014828261218c565b61201e82826115e8565b5050565b61202a612a09565b73ffffffffffffffffffffffffffffffffffffffff16612048611bc8565b73ffffffffffffffffffffffffffffffffffffffff161461209e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161209590614924565b60405180910390fd5b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fc9f2d63eee8632b33d7a7db5252eb29036e81ee4fbe29260febe0c49ffb8a7bb60405160405180910390a38060065f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601a602052805f5260405f205f915054906101000a900460ff1681565b600b60019054906101000a900460ff1681565b612194612a09565b73ffffffffffffffffffffffffffffffffffffffff166121b2611bc8565b73ffffffffffffffffffffffffffffffffffffffff1614612208576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121ff90614924565b60405180910390fd5b8060185f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7826040516122a291906145a5565b60405180910390a25050565b6122b6612a09565b73ffffffffffffffffffffffffffffffffffffffff166122d4611bc8565b73ffffffffffffffffffffffffffffffffffffffff161461232a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161232190614924565b60405180910390fd5b8260128190555081601381905550806014819055506014546013546012546123529190614b29565b61235c9190614b29565b601181905550600560115411156123a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161239f90614ea3565b60405180910390fd5b505050565b6123b5612a09565b73ffffffffffffffffffffffffffffffffffffffff166123d3611bc8565b73ffffffffffffffffffffffffffffffffffffffff1614612429576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161242090614924565b60405180910390fd5b670de0b6b3a76400006103e8600a61243f610f69565b612449919061496f565b61245391906149dd565b61245d91906149dd565b81101561249f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161249690614f31565b60405180910390fd5b670de0b6b3a7640000816124b3919061496f565b600a8190555050565b60085481565b5f6124cb612a09565b73ffffffffffffffffffffffffffffffffffffffff166124e9611bc8565b73ffffffffffffffffffffffffffffffffffffffff161461253f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161253690614924565b60405180910390fd5b620186a0600161254d610f69565b612557919061496f565b61256191906149dd565b8210156125a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161259a90614fbf565b60405180910390fd5b6103e860056125b0610f69565b6125ba919061496f565b6125c491906149dd565b821115612606576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125fd9061504d565b60405180910390fd5b8160098190555060019050919050565b60145481565b600d5481565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b60095481565b600f5481565b6126b8612a09565b73ffffffffffffffffffffffffffffffffffffffff166126d6611bc8565b73ffffffffffffffffffffffffffffffffffffffff161461272c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161272390614924565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361279a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612791906150db565b60405180910390fd5b6127a3816139e1565b50565b60135481565b600a5481565b6127ba612a09565b73ffffffffffffffffffffffffffffffffffffffff166127d8611bc8565b73ffffffffffffffffffffffffffffffffffffffff161461282e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161282590614924565b60405180910390fd5b600b60039054906101000a900460ff161561287e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161287590615169565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415801561291a5750737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b612959576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612950906151f7565b60405180910390fd5b6001600c5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff02191690831515021790555050565b60175481565b5f600c5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169050919050565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612a7e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a7590615285565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612aec576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ae390615313565b60405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612bc691906145f8565b60405180910390a3505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612c41576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c38906153a1565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612caf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ca69061542f565b60405180910390fd5b600c5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1615612d39576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d3090615497565b60405180910390fd5b600c5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1615612dc3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612dba906154ff565b60405180910390fd5b601b5f9054906101000a900460ff1615612e6157601c5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16612e60576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e579061558d565b60405180910390fd5b5b5f8103612e7857612e7383835f613b42565b613810565b600b5f9054906101000a900460ff161561335c57612e94611bc8565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015612f025750612ed2611bc8565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612f3a57505f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612f74575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612f8d5750600560149054906101000a900460ff16155b1561335b57600b60019054906101000a900460ff166130815760185f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680613041575060185f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b613080576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613077906155f5565b60405180910390fd5b5b601a5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16801561311e575060195f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b156131c557600854811115613168576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161315f90615683565b60405180910390fd5b600a546131748361147f565b8261317f9190614b29565b11156131c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131b7906156eb565b60405180910390fd5b61335a565b601a5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015613262575060195f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b156132b1576008548111156132ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132a390615779565b60405180910390fd5b613359565b60195f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1661335857600a5461330b8361147f565b826133169190614b29565b1115613357576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161334e906156eb565b60405180910390fd5b5b5b5b5b5b5f6133663061147f565b90505f600954821015905080801561338a5750600b60029054906101000a900460ff165b80156133a35750600560149054906101000a900460ff16155b80156133f65750601a5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b8015613449575060185f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b801561349c575060185f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b156134df576001600560146101000a81548160ff0219169083151502179055506134c4613db7565b5f600560146101000a81548160ff0219169083151502179055505b5f600560149054906101000a900460ff1615905060185f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168061358e575060185f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b15613597575f90505b5f811561380057601a5f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680156135f557505f601154115b156136bf576136226064613614601154886140b890919063ffffffff16565b6140cd90919063ffffffff16565b905060115460135482613635919061496f565b61363f91906149dd565b60165f82825461364f9190614b29565b9250508190555060115460145482613667919061496f565b61367191906149dd565b60175f8282546136819190614b29565b9250508190555060115460125482613699919061496f565b6136a391906149dd565b60155f8282546136b39190614b29565b925050819055506137dd565b601a5f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16801561371657505f600d54115b156137dc576137436064613735600d54886140b890919063ffffffff16565b6140cd90919063ffffffff16565b9050600d54600f5482613756919061496f565b61376091906149dd565b60165f8282546137709190614b29565b92505081905550600d5460105482613788919061496f565b61379291906149dd565b60175f8282546137a29190614b29565b92505081905550600d54600e54826137ba919061496f565b6137c491906149dd565b60155f8282546137d49190614b29565b925050819055505b5b5f8111156137f1576137f0873083613b42565b5b80856137fd9190615797565b94505b61380b878787613b42565b505050505b505050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603613883576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161387a9061583a565b60405180910390fd5b61388e825f836140e2565b5f805f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905081811015613911576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613908906158c8565b60405180910390fd5b8181035f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508160025f8282546139659190615797565b925050819055505f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516139c991906145f8565b60405180910390a36139dc835f846140e7565b505050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b80601a5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603613bb0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613ba7906153a1565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603613c1e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613c159061542f565b60405180910390fd5b613c298383836140e2565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905081811015613cac576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613ca390615956565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550815f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f828254613d3a9190614b29565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051613d9e91906145f8565b60405180910390a3613db18484846140e7565b50505050565b5f613dc13061147f565b90505f601754601554601654613dd79190614b29565b613de19190614b29565b90505f80831480613df157505f82145b15613dfe575050506140b6565b6014600954613e0d919061496f565b831115613e26576014600954613e23919061496f565b92505b5f60028360165486613e38919061496f565b613e4291906149dd565b613e4c91906149dd565b90505f613e6282866140ec90919063ffffffff16565b90505f479050613e7182614101565b5f613e8582476140ec90919063ffffffff16565b90505f613ec86002601654613e9a91906149dd565b88613ea59190615797565b613eba601554856140b890919063ffffffff16565b6140cd90919063ffffffff16565b90505f613f0b6002601654613edd91906149dd565b89613ee89190615797565b613efd601754866140b890919063ffffffff16565b6140cd90919063ffffffff16565b90505f818385613f1b9190615797565b613f259190615797565b90505f6016819055505f6015819055505f60178190555060075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1682604051613f8190614c59565b5f6040518083038185875af1925050503d805f8114613fbb576040519150601f19603f3d011682016040523d82523d5f602084013e613fc0565b606091505b5050809850505f87118015613fd457505f81115b1561402157613fe38782614334565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb561868260165460405161401893929190615974565b60405180910390a15b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff164760405161406690614c59565b5f6040518083038185875af1925050503d805f81146140a0576040519150601f19603f3d011682016040523d82523d5f602084013e6140a5565b606091505b505080985050505050505050505050505b565b5f81836140c5919061496f565b905092915050565b5f81836140da91906149dd565b905092915050565b505050565b505050565b5f81836140f99190615797565b905092915050565b5f600267ffffffffffffffff81111561411d5761411c6159a9565b5b60405190808252806020026020018201604052801561414b5781602001602082028036833780820191505090505b50905030815f81518110614162576141616159d6565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015614205573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906142299190615a17565b8160018151811061423d5761423c6159d6565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506142a2307f000000000000000000000000000000000000000000000000000000000000000084612a10565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac947835f8430426040518663ffffffff1660e01b8152600401614303959493929190615b32565b5f604051808303815f87803b15801561431a575f80fd5b505af115801561432c573d5f803e3d5ffd5b505050505050565b61435f307f000000000000000000000000000000000000000000000000000000000000000084612a10565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f305d7198230855f806143a8611bc8565b426040518863ffffffff1660e01b81526004016143ca96959493929190615b8a565b60606040518083038185885af11580156143e6573d5f803e3d5ffd5b50505050506040513d601f19601f8201168201806040525081019061440b9190615bfd565b5050505050565b5f81519050919050565b5f82825260208201905092915050565b5f5b8381101561444957808201518184015260208101905061442e565b5f8484015250505050565b5f601f19601f8301169050919050565b5f61446e82614412565b614478818561441c565b935061448881856020860161442c565b61449181614454565b840191505092915050565b5f6020820190508181035f8301526144b48184614464565b905092915050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6144e9826144c0565b9050919050565b6144f9816144df565b8114614503575f80fd5b50565b5f81359050614514816144f0565b92915050565b5f819050919050565b61452c8161451a565b8114614536575f80fd5b50565b5f8135905061454781614523565b92915050565b5f8060408385031215614563576145626144bc565b5b5f61457085828601614506565b925050602061458185828601614539565b9150509250929050565b5f8115159050919050565b61459f8161458b565b82525050565b5f6020820190506145b85f830184614596565b92915050565b5f602082840312156145d3576145d26144bc565b5b5f6145e084828501614506565b91505092915050565b6145f28161451a565b82525050565b5f60208201905061460b5f8301846145e9565b92915050565b5f819050919050565b5f61463461462f61462a846144c0565b614611565b6144c0565b9050919050565b5f6146458261461a565b9050919050565b5f6146568261463b565b9050919050565b6146668161464c565b82525050565b5f60208201905061467f5f83018461465d565b92915050565b5f6020828403121561469a576146996144bc565b5b5f6146a784828501614539565b91505092915050565b5f805f606084860312156146c7576146c66144bc565b5b5f6146d486828701614506565b93505060206146e586828701614506565b92505060406146f686828701614539565b9150509250925092565b614709816144df565b82525050565b5f6020820190506147225f830184614700565b92915050565b5f60ff82169050919050565b61473d81614728565b82525050565b5f6020820190506147565f830184614734565b92915050565b6147658161458b565b811461476f575f80fd5b50565b5f813590506147808161475c565b92915050565b5f806040838503121561479c5761479b6144bc565b5b5f6147a985828601614506565b92505060206147ba85828601614772565b9150509250929050565b5f805f606084860312156147db576147da6144bc565b5b5f6147e886828701614539565b93505060206147f986828701614539565b925050604061480a86828701614539565b9150509250925092565b5f60208284031215614829576148286144bc565b5b5f61483684828501614772565b91505092915050565b5f8060408385031215614855576148546144bc565b5b5f61486285828601614506565b925050602061487385828601614506565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f60028204905060018216806148c157607f821691505b6020821081036148d4576148d361487d565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f61490e60208361441c565b9150614919826148da565b602082019050919050565b5f6020820190508181035f83015261493b81614902565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f6149798261451a565b91506149848361451a565b92508282026149928161451a565b915082820484148315176149a9576149a8614942565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f6149e78261451a565b91506149f28361451a565b925082614a0257614a016149b0565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e74205f8201527f6c6f776572207468616e20302e35250000000000000000000000000000000000602082015250565b5f614a67602f8361441c565b9150614a7282614a0d565b604082019050919050565b5f6020820190508181035f830152614a9481614a5b565b9050919050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320615f8201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b5f614af560288361441c565b9150614b0082614a9b565b604082019050919050565b5f6020820190508181035f830152614b2281614ae9565b9050919050565b5f614b338261451a565b9150614b3e8361451a565b9250828201905080821115614b5657614b55614942565b5b92915050565b7f416d6f756e74206d7573742062652067726561746572207468616e20300000005f82015250565b5f614b90601d8361441c565b9150614b9b82614b5c565b602082019050919050565b5f6020820190508181035f830152614bbd81614b84565b9050919050565b7f4e6f2045544820746f20776974686472617700000000000000000000000000005f82015250565b5f614bf860128361441c565b9150614c0382614bc4565b602082019050919050565b5f6020820190508181035f830152614c2581614bec565b9050919050565b5f81905092915050565b50565b5f614c445f83614c2c565b9150614c4f82614c36565b5f82019050919050565b5f614c6382614c39565b9150819050919050565b7f5472616e73666572206661696c656400000000000000000000000000000000005f82015250565b5f614ca1600f8361441c565b9150614cac82614c6d565b602082019050919050565b5f6020820190508181035f830152614cce81614c95565b9050919050565b7f4275792066656573206d757374206265203c3d20352e000000000000000000005f82015250565b5f614d0960168361441c565b9150614d1482614cd5565b602082019050919050565b5f6020820190508181035f830152614d3681614cfd565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d205f8201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b5f614d9760398361441c565b9150614da282614d3d565b604082019050919050565b5f6020820190508181035f830152614dc481614d8b565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f775f8201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b5f614e2560258361441c565b9150614e3082614dcb565b604082019050919050565b5f6020820190508181035f830152614e5281614e19565b9050919050565b7f53656c6c2066656573206d757374206265203c3d20352e0000000000000000005f82015250565b5f614e8d60178361441c565b9150614e9882614e59565b602082019050919050565b5f6020820190508181035f830152614eba81614e81565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e205f8201527f312e302500000000000000000000000000000000000000000000000000000000602082015250565b5f614f1b60248361441c565b9150614f2682614ec1565b604082019050919050565b5f6020820190508181035f830152614f4881614f0f565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e5f8201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b5f614fa960358361441c565b9150614fb482614f4f565b604082019050919050565b5f6020820190508181035f830152614fd681614f9d565b9050919050565b7f5377617020616d6f756e742063616e6e6f7420626520686967686572207468615f8201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b5f61503760348361441c565b915061504282614fdd565b604082019050919050565b5f6020820190508181035f8301526150648161502b565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f6150c560268361441c565b91506150d08261506b565b604082019050919050565b5f6020820190508181035f8301526150f2816150b9565b9050919050565b7f5465616d20686173207265766f6b656420626c61636b6c6973742072696768745f8201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b5f61515360218361441c565b915061515e826150f9565b604082019050919050565b5f6020820190508181035f83015261518081615147565b9050919050565b7f43616e6e6f7420626c61636b6c69737420746f6b656e277320763220726f75745f8201527f6572206f7220763220706f6f6c2e000000000000000000000000000000000000602082015250565b5f6151e1602e8361441c565b91506151ec82615187565b604082019050919050565b5f6020820190508181035f83015261520e816151d5565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f61526f60248361441c565b915061527a82615215565b604082019050919050565b5f6020820190508181035f83015261529c81615263565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f6152fd60228361441c565b9150615308826152a3565b604082019050919050565b5f6020820190508181035f83015261532a816152f1565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f61538b60258361441c565b915061539682615331565b604082019050919050565b5f6020820190508181035f8301526153b88161537f565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f61541960238361441c565b9150615424826153bf565b604082019050919050565b5f6020820190508181035f8301526154468161540d565b9050919050565b7f53656e64657220626c61636b6c697374656400000000000000000000000000005f82015250565b5f61548160128361441c565b915061548c8261544d565b602082019050919050565b5f6020820190508181035f8301526154ae81615475565b9050919050565b7f526563656976657220626c61636b6c69737465640000000000000000000000005f82015250565b5f6154e960148361441c565b91506154f4826154b5565b602082019050919050565b5f6020820190508181035f830152615516816154dd565b9050919050565b7f4e6f7420617574686f72697a656420746f207472616e73666572207072652d6d5f8201527f6967726174696f6e2e0000000000000000000000000000000000000000000000602082015250565b5f61557760298361441c565b91506155828261551d565b604082019050919050565b5f6020820190508181035f8301526155a48161556b565b9050919050565b7f54726164696e67206973206e6f74206163746976652e000000000000000000005f82015250565b5f6155df60168361441c565b91506155ea826155ab565b602082019050919050565b5f6020820190508181035f83015261560c816155d3565b9050919050565b7f427579207472616e7366657220616d6f756e74206578636565647320746865205f8201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b5f61566d60358361441c565b915061567882615613565b604082019050919050565b5f6020820190508181035f83015261569a81615661565b9050919050565b7f4d61782077616c6c6574206578636565646564000000000000000000000000005f82015250565b5f6156d560138361441c565b91506156e0826156a1565b602082019050919050565b5f6020820190508181035f830152615702816156c9565b9050919050565b7f53656c6c207472616e7366657220616d6f756e742065786365656473207468655f8201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b5f61576360368361441c565b915061576e82615709565b604082019050919050565b5f6020820190508181035f83015261579081615757565b9050919050565b5f6157a18261451a565b91506157ac8361451a565b92508282039050818111156157c4576157c3614942565b5b92915050565b7f45524332303a206275726e2066726f6d20746865207a65726f206164647265735f8201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b5f61582460218361441c565b915061582f826157ca565b604082019050919050565b5f6020820190508181035f83015261585181615818565b9050919050565b7f45524332303a206275726e20616d6f756e7420657863656564732062616c616e5f8201527f6365000000000000000000000000000000000000000000000000000000000000602082015250565b5f6158b260228361441c565b91506158bd82615858565b604082019050919050565b5f6020820190508181035f8301526158df816158a6565b9050919050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320625f8201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b5f61594060268361441c565b915061594b826158e6565b604082019050919050565b5f6020820190508181035f83015261596d81615934565b9050919050565b5f6060820190506159875f8301866145e9565b61599460208301856145e9565b6159a160408301846145e9565b949350505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f81519050615a11816144f0565b92915050565b5f60208284031215615a2c57615a2b6144bc565b5b5f615a3984828501615a03565b91505092915050565b5f819050919050565b5f615a65615a60615a5b84615a42565b614611565b61451a565b9050919050565b615a7581615a4b565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b615aad816144df565b82525050565b5f615abe8383615aa4565b60208301905092915050565b5f602082019050919050565b5f615ae082615a7b565b615aea8185615a85565b9350615af583615a95565b805f5b83811015615b25578151615b0c8882615ab3565b9750615b1783615aca565b925050600181019050615af8565b5085935050505092915050565b5f60a082019050615b455f8301886145e9565b615b526020830187615a6c565b8181036040830152615b648186615ad6565b9050615b736060830185614700565b615b8060808301846145e9565b9695505050505050565b5f60c082019050615b9d5f830189614700565b615baa60208301886145e9565b615bb76040830187615a6c565b615bc46060830186615a6c565b615bd16080830185614700565b615bde60a08301846145e9565b979650505050505050565b5f81519050615bf781614523565b92915050565b5f805f60608486031215615c1457615c136144bc565b5b5f615c2186828701615be9565b9350506020615c3286828701615be9565b9250506040615c4386828701615be9565b915050925092509256fea264697066735822122042fe73858808771c0cb025a3eea972c49de0aeaab43189f0425ee1d41027111e64736f6c63430008140033

Deployed Bytecode

0x6080604052600436106103b0575f3560e01c80637cb332bb116101e6578063c02466681161010c578063e2f456051161009f578063f8b45b051161006e578063f8b45b0514610dab578063f9f92be414610dd5578063fde83a3414610dfd578063fe575a8714610e27576103b7565b8063e2f4560514610d05578063f11a24d314610d2f578063f2fde38b14610d59578063f637434214610d81576103b7565b8063d257b34f116100db578063d257b34f14610c39578063d729715f14610c75578063d85ba06314610c9f578063dd62ed3e14610cc9576103b7565b8063c024666814610b97578063c17b5b8c14610bbf578063c18bc19514610be7578063c8c8ebe414610c0f576103b7565b80639a7a23d611610184578063aa0e438811610153578063aa0e438814610ae1578063adee28ff14610b09578063b62496f514610b31578063bbc0c74214610b6d576103b7565b80639a7a23d614610a175780639c2e4ac614610a3f578063a457c2d714610a69578063a9059cbb14610aa5576103b7565b80638a8c523c116101c05780638a8c523c146109855780638da5cb5b1461099b578063924de9b7146109c557806395d89b41146109ed576103b7565b80637cb332bb1461091f5780637fa787ba146109475780638095d5641461095d576103b7565b80633dc599ff116102d65780636a486a8e11610269578063751039fc11610238578063751039fc1461087b5780637571336a146108a557806375e3661e146108cd578063782c4e99146108f5576103b7565b80636a486a8e146107d55780636ddd1713146107ff57806370a0823114610829578063715018a614610865576103b7565b80634fbee193116102a55780634fbee19314610731578063599270441461076d5780635f1893611461079757806360c44a38146107ad576103b7565b80633dc599ff1461067757806349bd5a5e146106a15780634a62bb65146106cb5780634e29e523146106f5576103b7565b806319eab0421161034e57806324b9f3c11161031d57806324b9f3c1146105bd57806327c8f835146105e7578063313ce56714610611578063395093511461063b576103b7565b806319eab042146105055780631a8145bb1461052f578063203e727e1461055957806323b872dd14610581576103b7565b806310d5de531161038a57806310d5de531461044b578063156c2f35146104875780631694505e146104b157806318160ddd146104db576103b7565b806306fdde03146103bb578063095ea7b3146103e55780630e922ca714610421576103b7565b366103b757005b5f80fd5b3480156103c6575f80fd5b506103cf610e63565b6040516103dc919061449c565b60405180910390f35b3480156103f0575f80fd5b5061040b6004803603810190610406919061454d565b610ef3565b60405161041891906145a5565b60405180910390f35b34801561042c575f80fd5b50610435610f10565b60405161044291906145a5565b60405180910390f35b348015610456575f80fd5b50610471600480360381019061046c91906145be565b610f22565b60405161047e91906145a5565b60405180910390f35b348015610492575f80fd5b5061049b610f3f565b6040516104a891906145f8565b60405180910390f35b3480156104bc575f80fd5b506104c5610f45565b6040516104d2919061466c565b60405180910390f35b3480156104e6575f80fd5b506104ef610f69565b6040516104fc91906145f8565b60405180910390f35b348015610510575f80fd5b50610519610f72565b60405161052691906145f8565b60405180910390f35b34801561053a575f80fd5b50610543610f78565b60405161055091906145f8565b60405180910390f35b348015610564575f80fd5b5061057f600480360381019061057a9190614685565b610f7e565b005b34801561058c575f80fd5b506105a760048036038101906105a291906146b0565b61108d565b6040516105b491906145a5565b60405180910390f35b3480156105c8575f80fd5b506105d161117f565b6040516105de91906145f8565b60405180910390f35b3480156105f2575f80fd5b506105fb611185565b604051610608919061470f565b60405180910390f35b34801561061c575f80fd5b5061062561118b565b6040516106329190614743565b60405180910390f35b348015610646575f80fd5b50610661600480360381019061065c919061454d565b611193565b60405161066e91906145a5565b60405180910390f35b348015610682575f80fd5b5061068b61123a565b60405161069891906145a5565b60405180910390f35b3480156106ac575f80fd5b506106b561124d565b6040516106c2919061470f565b60405180910390f35b3480156106d6575f80fd5b506106df611271565b6040516106ec91906145a5565b60405180910390f35b348015610700575f80fd5b5061071b600480360381019061071691906145be565b611283565b60405161072891906145a5565b60405180910390f35b34801561073c575f80fd5b50610757600480360381019061075291906145be565b6112a0565b60405161076491906145a5565b60405180910390f35b348015610778575f80fd5b506107816112f2565b60405161078e919061470f565b60405180910390f35b3480156107a2575f80fd5b506107ab611317565b005b3480156107b8575f80fd5b506107d360048036038101906107ce9190614685565b6113b0565b005b3480156107e0575f80fd5b506107e9611466565b6040516107f691906145f8565b60405180910390f35b34801561080a575f80fd5b5061081361146c565b60405161082091906145a5565b60405180910390f35b348015610834575f80fd5b5061084f600480360381019061084a91906145be565b61147f565b60405161085c91906145f8565b60405180910390f35b348015610870575f80fd5b506108796114c4565b005b348015610886575f80fd5b5061088f61154b565b60405161089c91906145a5565b60405180910390f35b3480156108b0575f80fd5b506108cb60048036038101906108c69190614786565b6115e8565b005b3480156108d8575f80fd5b506108f360048036038101906108ee91906145be565b6116bc565b005b348015610900575f80fd5b5061090961178f565b604051610916919061470f565b60405180910390f35b34801561092a575f80fd5b50610945600480360381019061094091906145be565b6117b4565b005b348015610952575f80fd5b5061095b6118ee565b005b348015610968575f80fd5b50610983600480360381019061097e91906147c4565b6119fc565b005b348015610990575f80fd5b50610999611afb565b005b3480156109a6575f80fd5b506109af611bc8565b6040516109bc919061470f565b60405180910390f35b3480156109d0575f80fd5b506109eb60048036038101906109e69190614814565b611bf0565b005b3480156109f8575f80fd5b50610a01611c89565b604051610a0e919061449c565b60405180910390f35b348015610a22575f80fd5b50610a3d6004803603810190610a389190614786565b611d19565b005b348015610a4a575f80fd5b50610a53611e31565b604051610a6091906145f8565b60405180910390f35b348015610a74575f80fd5b50610a8f6004803603810190610a8a919061454d565b611e37565b604051610a9c91906145a5565b60405180910390f35b348015610ab0575f80fd5b50610acb6004803603810190610ac6919061454d565b611f1d565b604051610ad891906145a5565b60405180910390f35b348015610aec575f80fd5b50610b076004803603810190610b029190614786565b611f3a565b005b348015610b14575f80fd5b50610b2f6004803603810190610b2a91906145be565b612022565b005b348015610b3c575f80fd5b50610b576004803603810190610b5291906145be565b61215c565b604051610b6491906145a5565b60405180910390f35b348015610b78575f80fd5b50610b81612179565b604051610b8e91906145a5565b60405180910390f35b348015610ba2575f80fd5b50610bbd6004803603810190610bb89190614786565b61218c565b005b348015610bca575f80fd5b50610be56004803603810190610be091906147c4565b6122ae565b005b348015610bf2575f80fd5b50610c0d6004803603810190610c089190614685565b6123ad565b005b348015610c1a575f80fd5b50610c236124bc565b604051610c3091906145f8565b60405180910390f35b348015610c44575f80fd5b50610c5f6004803603810190610c5a9190614685565b6124c2565b604051610c6c91906145a5565b60405180910390f35b348015610c80575f80fd5b50610c89612616565b604051610c9691906145f8565b60405180910390f35b348015610caa575f80fd5b50610cb361261c565b604051610cc091906145f8565b60405180910390f35b348015610cd4575f80fd5b50610cef6004803603810190610cea919061483f565b612622565b604051610cfc91906145f8565b60405180910390f35b348015610d10575f80fd5b50610d196126a4565b604051610d2691906145f8565b60405180910390f35b348015610d3a575f80fd5b50610d436126aa565b604051610d5091906145f8565b60405180910390f35b348015610d64575f80fd5b50610d7f6004803603810190610d7a91906145be565b6126b0565b005b348015610d8c575f80fd5b50610d956127a6565b604051610da291906145f8565b60405180910390f35b348015610db6575f80fd5b50610dbf6127ac565b604051610dcc91906145f8565b60405180910390f35b348015610de0575f80fd5b50610dfb6004803603810190610df691906145be565b6127b2565b005b348015610e08575f80fd5b50610e116129b1565b604051610e1e91906145f8565b60405180910390f35b348015610e32575f80fd5b50610e4d6004803603810190610e4891906145be565b6129b7565b604051610e5a91906145a5565b60405180910390f35b606060038054610e72906148aa565b80601f0160208091040260200160405190810160405280929190818152602001828054610e9e906148aa565b8015610ee95780601f10610ec057610100808354040283529160200191610ee9565b820191905f5260205f20905b815481529060010190602001808311610ecc57829003601f168201915b5050505050905090565b5f610f06610eff612a09565b8484612a10565b6001905092915050565b601b5f9054906101000a900460ff1681565b6019602052805f5260405f205f915054906101000a900460ff1681565b600e5481565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b5f600254905090565b60125481565b60165481565b610f86612a09565b73ffffffffffffffffffffffffffffffffffffffff16610fa4611bc8565b73ffffffffffffffffffffffffffffffffffffffff1614610ffa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ff190614924565b60405180910390fd5b670de0b6b3a76400006103e86005611010610f69565b61101a919061496f565b61102491906149dd565b61102e91906149dd565b811015611070576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161106790614a7d565b60405180910390fd5b670de0b6b3a764000081611084919061496f565b60088190555050565b5f611099848484612bd3565b5f60015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6110e0612a09565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205490508281101561115f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161115690614b0b565b60405180910390fd5b6111738561116b612a09565b858403612a10565b60019150509392505050565b60155481565b61dead81565b5f6012905090565b5f61123061119f612a09565b848460015f6111ac612a09565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205461122b9190614b29565b612a10565b6001905092915050565b600b60039054906101000a900460ff1681565b7f000000000000000000000000eedff562d996b84ab80979a525320fdc5f2b31d381565b600b5f9054906101000a900460ff1681565b601c602052805f5260405f205f915054906101000a900460ff1681565b5f60185f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169050919050565b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61131f612a09565b73ffffffffffffffffffffffffffffffffffffffff1661133d611bc8565b73ffffffffffffffffffffffffffffffffffffffff1614611393576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161138a90614924565b60405180910390fd5b6001600b60036101000a81548160ff021916908315150217905550565b5f81116113f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113e990614ba6565b60405180910390fd5b6114046113fd612a09565b3083612bd3565b61140e3082613815565b611416612a09565b73ffffffffffffffffffffffffffffffffffffffff167ffd38818f5291bf0bb3a2a48aadc06ba8757865d1dabd804585338aab3009dcb68260405161145b91906145f8565b60405180910390a250565b60115481565b600b60029054906101000a900460ff1681565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b6114cc612a09565b73ffffffffffffffffffffffffffffffffffffffff166114ea611bc8565b73ffffffffffffffffffffffffffffffffffffffff1614611540576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161153790614924565b60405180910390fd5b6115495f6139e1565b565b5f611554612a09565b73ffffffffffffffffffffffffffffffffffffffff16611572611bc8565b73ffffffffffffffffffffffffffffffffffffffff16146115c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115bf90614924565b60405180910390fd5b5f600b5f6101000a81548160ff0219169083151502179055506001905090565b6115f0612a09565b73ffffffffffffffffffffffffffffffffffffffff1661160e611bc8565b73ffffffffffffffffffffffffffffffffffffffff1614611664576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161165b90614924565b60405180910390fd5b8060195f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b6116c4612a09565b73ffffffffffffffffffffffffffffffffffffffff166116e2611bc8565b73ffffffffffffffffffffffffffffffffffffffff1614611738576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161172f90614924565b60405180910390fd5b5f600c5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff02191690831515021790555050565b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6117bc612a09565b73ffffffffffffffffffffffffffffffffffffffff166117da611bc8565b73ffffffffffffffffffffffffffffffffffffffff1614611830576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161182790614924565b60405180910390fd5b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8aa0f85050aca99be43beb823e0457e77966b3baf697a289b03681978f96166860405160405180910390a38060075f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b5f4711611930576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161192790614c0e565b60405180910390fd5b5f60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff164760405161197690614c59565b5f6040518083038185875af1925050503d805f81146119b0576040519150601f19603f3d011682016040523d82523d5f602084013e6119b5565b606091505b50509050806119f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119f090614cb7565b60405180910390fd5b50565b611a04612a09565b73ffffffffffffffffffffffffffffffffffffffff16611a22611bc8565b73ffffffffffffffffffffffffffffffffffffffff1614611a78576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a6f90614924565b60405180910390fd5b82600e8190555081600f8190555080601081905550601054600f54600e54611aa09190614b29565b611aaa9190614b29565b600d819055506005600d541115611af6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aed90614d1f565b60405180910390fd5b505050565b611b03612a09565b73ffffffffffffffffffffffffffffffffffffffff16611b21611bc8565b73ffffffffffffffffffffffffffffffffffffffff1614611b77576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b6e90614924565b60405180910390fd5b6001600b60016101000a81548160ff0219169083151502179055506001600b60026101000a81548160ff0219169083151502179055505f601b5f6101000a81548160ff021916908315150217905550565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611bf8612a09565b73ffffffffffffffffffffffffffffffffffffffff16611c16611bc8565b73ffffffffffffffffffffffffffffffffffffffff1614611c6c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c6390614924565b60405180910390fd5b80600b60026101000a81548160ff02191690831515021790555050565b606060048054611c98906148aa565b80601f0160208091040260200160405190810160405280929190818152602001828054611cc4906148aa565b8015611d0f5780601f10611ce657610100808354040283529160200191611d0f565b820191905f5260205f20905b815481529060010190602001808311611cf257829003601f168201915b5050505050905090565b611d21612a09565b73ffffffffffffffffffffffffffffffffffffffff16611d3f611bc8565b73ffffffffffffffffffffffffffffffffffffffff1614611d95576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d8c90614924565b60405180910390fd5b7f000000000000000000000000eedff562d996b84ab80979a525320fdc5f2b31d373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611e23576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e1a90614dad565b60405180910390fd5b611e2d8282613aa4565b5050565b60105481565b5f8060015f611e44612a09565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905082811015611efe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ef590614e3b565b60405180910390fd5b611f12611f09612a09565b85858403612a10565b600191505092915050565b5f611f30611f29612a09565b8484612bd3565b6001905092915050565b611f42612a09565b73ffffffffffffffffffffffffffffffffffffffff16611f60611bc8565b73ffffffffffffffffffffffffffffffffffffffff1614611fb6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fad90614924565b60405180910390fd5b80601c5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550612014828261218c565b61201e82826115e8565b5050565b61202a612a09565b73ffffffffffffffffffffffffffffffffffffffff16612048611bc8565b73ffffffffffffffffffffffffffffffffffffffff161461209e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161209590614924565b60405180910390fd5b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fc9f2d63eee8632b33d7a7db5252eb29036e81ee4fbe29260febe0c49ffb8a7bb60405160405180910390a38060065f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601a602052805f5260405f205f915054906101000a900460ff1681565b600b60019054906101000a900460ff1681565b612194612a09565b73ffffffffffffffffffffffffffffffffffffffff166121b2611bc8565b73ffffffffffffffffffffffffffffffffffffffff1614612208576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121ff90614924565b60405180910390fd5b8060185f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7826040516122a291906145a5565b60405180910390a25050565b6122b6612a09565b73ffffffffffffffffffffffffffffffffffffffff166122d4611bc8565b73ffffffffffffffffffffffffffffffffffffffff161461232a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161232190614924565b60405180910390fd5b8260128190555081601381905550806014819055506014546013546012546123529190614b29565b61235c9190614b29565b601181905550600560115411156123a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161239f90614ea3565b60405180910390fd5b505050565b6123b5612a09565b73ffffffffffffffffffffffffffffffffffffffff166123d3611bc8565b73ffffffffffffffffffffffffffffffffffffffff1614612429576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161242090614924565b60405180910390fd5b670de0b6b3a76400006103e8600a61243f610f69565b612449919061496f565b61245391906149dd565b61245d91906149dd565b81101561249f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161249690614f31565b60405180910390fd5b670de0b6b3a7640000816124b3919061496f565b600a8190555050565b60085481565b5f6124cb612a09565b73ffffffffffffffffffffffffffffffffffffffff166124e9611bc8565b73ffffffffffffffffffffffffffffffffffffffff161461253f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161253690614924565b60405180910390fd5b620186a0600161254d610f69565b612557919061496f565b61256191906149dd565b8210156125a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161259a90614fbf565b60405180910390fd5b6103e860056125b0610f69565b6125ba919061496f565b6125c491906149dd565b821115612606576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125fd9061504d565b60405180910390fd5b8160098190555060019050919050565b60145481565b600d5481565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b60095481565b600f5481565b6126b8612a09565b73ffffffffffffffffffffffffffffffffffffffff166126d6611bc8565b73ffffffffffffffffffffffffffffffffffffffff161461272c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161272390614924565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361279a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612791906150db565b60405180910390fd5b6127a3816139e1565b50565b60135481565b600a5481565b6127ba612a09565b73ffffffffffffffffffffffffffffffffffffffff166127d8611bc8565b73ffffffffffffffffffffffffffffffffffffffff161461282e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161282590614924565b60405180910390fd5b600b60039054906101000a900460ff161561287e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161287590615169565b60405180910390fd5b7f000000000000000000000000eedff562d996b84ab80979a525320fdc5f2b31d373ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415801561291a5750737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b612959576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612950906151f7565b60405180910390fd5b6001600c5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff02191690831515021790555050565b60175481565b5f600c5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169050919050565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612a7e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a7590615285565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612aec576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ae390615313565b60405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612bc691906145f8565b60405180910390a3505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612c41576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c38906153a1565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612caf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ca69061542f565b60405180910390fd5b600c5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1615612d39576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d3090615497565b60405180910390fd5b600c5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1615612dc3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612dba906154ff565b60405180910390fd5b601b5f9054906101000a900460ff1615612e6157601c5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16612e60576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e579061558d565b60405180910390fd5b5b5f8103612e7857612e7383835f613b42565b613810565b600b5f9054906101000a900460ff161561335c57612e94611bc8565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614158015612f025750612ed2611bc8565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612f3a57505f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612f74575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b8015612f8d5750600560149054906101000a900460ff16155b1561335b57600b60019054906101000a900460ff166130815760185f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680613041575060185f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b613080576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613077906155f5565b60405180910390fd5b5b601a5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16801561311e575060195f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b156131c557600854811115613168576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161315f90615683565b60405180910390fd5b600a546131748361147f565b8261317f9190614b29565b11156131c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131b7906156eb565b60405180910390fd5b61335a565b601a5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015613262575060195f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b156132b1576008548111156132ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132a390615779565b60405180910390fd5b613359565b60195f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1661335857600a5461330b8361147f565b826133169190614b29565b1115613357576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161334e906156eb565b60405180910390fd5b5b5b5b5b5b5f6133663061147f565b90505f600954821015905080801561338a5750600b60029054906101000a900460ff165b80156133a35750600560149054906101000a900460ff16155b80156133f65750601a5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b8015613449575060185f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b801561349c575060185f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b156134df576001600560146101000a81548160ff0219169083151502179055506134c4613db7565b5f600560146101000a81548160ff0219169083151502179055505b5f600560149054906101000a900460ff1615905060185f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168061358e575060185f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b15613597575f90505b5f811561380057601a5f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680156135f557505f601154115b156136bf576136226064613614601154886140b890919063ffffffff16565b6140cd90919063ffffffff16565b905060115460135482613635919061496f565b61363f91906149dd565b60165f82825461364f9190614b29565b9250508190555060115460145482613667919061496f565b61367191906149dd565b60175f8282546136819190614b29565b9250508190555060115460125482613699919061496f565b6136a391906149dd565b60155f8282546136b39190614b29565b925050819055506137dd565b601a5f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16801561371657505f600d54115b156137dc576137436064613735600d54886140b890919063ffffffff16565b6140cd90919063ffffffff16565b9050600d54600f5482613756919061496f565b61376091906149dd565b60165f8282546137709190614b29565b92505081905550600d5460105482613788919061496f565b61379291906149dd565b60175f8282546137a29190614b29565b92505081905550600d54600e54826137ba919061496f565b6137c491906149dd565b60155f8282546137d49190614b29565b925050819055505b5b5f8111156137f1576137f0873083613b42565b5b80856137fd9190615797565b94505b61380b878787613b42565b505050505b505050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603613883576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161387a9061583a565b60405180910390fd5b61388e825f836140e2565b5f805f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905081811015613911576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613908906158c8565b60405180910390fd5b8181035f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508160025f8282546139659190615797565b925050819055505f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516139c991906145f8565b60405180910390a36139dc835f846140e7565b505050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b80601a5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603613bb0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613ba7906153a1565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603613c1e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613c159061542f565b60405180910390fd5b613c298383836140e2565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905081811015613cac576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613ca390615956565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550815f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f828254613d3a9190614b29565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051613d9e91906145f8565b60405180910390a3613db18484846140e7565b50505050565b5f613dc13061147f565b90505f601754601554601654613dd79190614b29565b613de19190614b29565b90505f80831480613df157505f82145b15613dfe575050506140b6565b6014600954613e0d919061496f565b831115613e26576014600954613e23919061496f565b92505b5f60028360165486613e38919061496f565b613e4291906149dd565b613e4c91906149dd565b90505f613e6282866140ec90919063ffffffff16565b90505f479050613e7182614101565b5f613e8582476140ec90919063ffffffff16565b90505f613ec86002601654613e9a91906149dd565b88613ea59190615797565b613eba601554856140b890919063ffffffff16565b6140cd90919063ffffffff16565b90505f613f0b6002601654613edd91906149dd565b89613ee89190615797565b613efd601754866140b890919063ffffffff16565b6140cd90919063ffffffff16565b90505f818385613f1b9190615797565b613f259190615797565b90505f6016819055505f6015819055505f60178190555060075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1682604051613f8190614c59565b5f6040518083038185875af1925050503d805f8114613fbb576040519150601f19603f3d011682016040523d82523d5f602084013e613fc0565b606091505b5050809850505f87118015613fd457505f81115b1561402157613fe38782614334565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb561868260165460405161401893929190615974565b60405180910390a15b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff164760405161406690614c59565b5f6040518083038185875af1925050503d805f81146140a0576040519150601f19603f3d011682016040523d82523d5f602084013e6140a5565b606091505b505080985050505050505050505050505b565b5f81836140c5919061496f565b905092915050565b5f81836140da91906149dd565b905092915050565b505050565b505050565b5f81836140f99190615797565b905092915050565b5f600267ffffffffffffffff81111561411d5761411c6159a9565b5b60405190808252806020026020018201604052801561414b5781602001602082028036833780820191505090505b50905030815f81518110614162576141616159d6565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015614205573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906142299190615a17565b8160018151811061423d5761423c6159d6565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506142a2307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84612a10565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac947835f8430426040518663ffffffff1660e01b8152600401614303959493929190615b32565b5f604051808303815f87803b15801561431a575f80fd5b505af115801561432c573d5f803e3d5ffd5b505050505050565b61435f307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84612a10565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663f305d7198230855f806143a8611bc8565b426040518863ffffffff1660e01b81526004016143ca96959493929190615b8a565b60606040518083038185885af11580156143e6573d5f803e3d5ffd5b50505050506040513d601f19601f8201168201806040525081019061440b9190615bfd565b5050505050565b5f81519050919050565b5f82825260208201905092915050565b5f5b8381101561444957808201518184015260208101905061442e565b5f8484015250505050565b5f601f19601f8301169050919050565b5f61446e82614412565b614478818561441c565b935061448881856020860161442c565b61449181614454565b840191505092915050565b5f6020820190508181035f8301526144b48184614464565b905092915050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6144e9826144c0565b9050919050565b6144f9816144df565b8114614503575f80fd5b50565b5f81359050614514816144f0565b92915050565b5f819050919050565b61452c8161451a565b8114614536575f80fd5b50565b5f8135905061454781614523565b92915050565b5f8060408385031215614563576145626144bc565b5b5f61457085828601614506565b925050602061458185828601614539565b9150509250929050565b5f8115159050919050565b61459f8161458b565b82525050565b5f6020820190506145b85f830184614596565b92915050565b5f602082840312156145d3576145d26144bc565b5b5f6145e084828501614506565b91505092915050565b6145f28161451a565b82525050565b5f60208201905061460b5f8301846145e9565b92915050565b5f819050919050565b5f61463461462f61462a846144c0565b614611565b6144c0565b9050919050565b5f6146458261461a565b9050919050565b5f6146568261463b565b9050919050565b6146668161464c565b82525050565b5f60208201905061467f5f83018461465d565b92915050565b5f6020828403121561469a576146996144bc565b5b5f6146a784828501614539565b91505092915050565b5f805f606084860312156146c7576146c66144bc565b5b5f6146d486828701614506565b93505060206146e586828701614506565b92505060406146f686828701614539565b9150509250925092565b614709816144df565b82525050565b5f6020820190506147225f830184614700565b92915050565b5f60ff82169050919050565b61473d81614728565b82525050565b5f6020820190506147565f830184614734565b92915050565b6147658161458b565b811461476f575f80fd5b50565b5f813590506147808161475c565b92915050565b5f806040838503121561479c5761479b6144bc565b5b5f6147a985828601614506565b92505060206147ba85828601614772565b9150509250929050565b5f805f606084860312156147db576147da6144bc565b5b5f6147e886828701614539565b93505060206147f986828701614539565b925050604061480a86828701614539565b9150509250925092565b5f60208284031215614829576148286144bc565b5b5f61483684828501614772565b91505092915050565b5f8060408385031215614855576148546144bc565b5b5f61486285828601614506565b925050602061487385828601614506565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f60028204905060018216806148c157607f821691505b6020821081036148d4576148d361487d565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f61490e60208361441c565b9150614919826148da565b602082019050919050565b5f6020820190508181035f83015261493b81614902565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f6149798261451a565b91506149848361451a565b92508282026149928161451a565b915082820484148315176149a9576149a8614942565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f6149e78261451a565b91506149f28361451a565b925082614a0257614a016149b0565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e74205f8201527f6c6f776572207468616e20302e35250000000000000000000000000000000000602082015250565b5f614a67602f8361441c565b9150614a7282614a0d565b604082019050919050565b5f6020820190508181035f830152614a9481614a5b565b9050919050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320615f8201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b5f614af560288361441c565b9150614b0082614a9b565b604082019050919050565b5f6020820190508181035f830152614b2281614ae9565b9050919050565b5f614b338261451a565b9150614b3e8361451a565b9250828201905080821115614b5657614b55614942565b5b92915050565b7f416d6f756e74206d7573742062652067726561746572207468616e20300000005f82015250565b5f614b90601d8361441c565b9150614b9b82614b5c565b602082019050919050565b5f6020820190508181035f830152614bbd81614b84565b9050919050565b7f4e6f2045544820746f20776974686472617700000000000000000000000000005f82015250565b5f614bf860128361441c565b9150614c0382614bc4565b602082019050919050565b5f6020820190508181035f830152614c2581614bec565b9050919050565b5f81905092915050565b50565b5f614c445f83614c2c565b9150614c4f82614c36565b5f82019050919050565b5f614c6382614c39565b9150819050919050565b7f5472616e73666572206661696c656400000000000000000000000000000000005f82015250565b5f614ca1600f8361441c565b9150614cac82614c6d565b602082019050919050565b5f6020820190508181035f830152614cce81614c95565b9050919050565b7f4275792066656573206d757374206265203c3d20352e000000000000000000005f82015250565b5f614d0960168361441c565b9150614d1482614cd5565b602082019050919050565b5f6020820190508181035f830152614d3681614cfd565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d205f8201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b5f614d9760398361441c565b9150614da282614d3d565b604082019050919050565b5f6020820190508181035f830152614dc481614d8b565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f775f8201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b5f614e2560258361441c565b9150614e3082614dcb565b604082019050919050565b5f6020820190508181035f830152614e5281614e19565b9050919050565b7f53656c6c2066656573206d757374206265203c3d20352e0000000000000000005f82015250565b5f614e8d60178361441c565b9150614e9882614e59565b602082019050919050565b5f6020820190508181035f830152614eba81614e81565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e205f8201527f312e302500000000000000000000000000000000000000000000000000000000602082015250565b5f614f1b60248361441c565b9150614f2682614ec1565b604082019050919050565b5f6020820190508181035f830152614f4881614f0f565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e5f8201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b5f614fa960358361441c565b9150614fb482614f4f565b604082019050919050565b5f6020820190508181035f830152614fd681614f9d565b9050919050565b7f5377617020616d6f756e742063616e6e6f7420626520686967686572207468615f8201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b5f61503760348361441c565b915061504282614fdd565b604082019050919050565b5f6020820190508181035f8301526150648161502b565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f6150c560268361441c565b91506150d08261506b565b604082019050919050565b5f6020820190508181035f8301526150f2816150b9565b9050919050565b7f5465616d20686173207265766f6b656420626c61636b6c6973742072696768745f8201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b5f61515360218361441c565b915061515e826150f9565b604082019050919050565b5f6020820190508181035f83015261518081615147565b9050919050565b7f43616e6e6f7420626c61636b6c69737420746f6b656e277320763220726f75745f8201527f6572206f7220763220706f6f6c2e000000000000000000000000000000000000602082015250565b5f6151e1602e8361441c565b91506151ec82615187565b604082019050919050565b5f6020820190508181035f83015261520e816151d5565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f61526f60248361441c565b915061527a82615215565b604082019050919050565b5f6020820190508181035f83015261529c81615263565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f6152fd60228361441c565b9150615308826152a3565b604082019050919050565b5f6020820190508181035f83015261532a816152f1565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f61538b60258361441c565b915061539682615331565b604082019050919050565b5f6020820190508181035f8301526153b88161537f565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f61541960238361441c565b9150615424826153bf565b604082019050919050565b5f6020820190508181035f8301526154468161540d565b9050919050565b7f53656e64657220626c61636b6c697374656400000000000000000000000000005f82015250565b5f61548160128361441c565b915061548c8261544d565b602082019050919050565b5f6020820190508181035f8301526154ae81615475565b9050919050565b7f526563656976657220626c61636b6c69737465640000000000000000000000005f82015250565b5f6154e960148361441c565b91506154f4826154b5565b602082019050919050565b5f6020820190508181035f830152615516816154dd565b9050919050565b7f4e6f7420617574686f72697a656420746f207472616e73666572207072652d6d5f8201527f6967726174696f6e2e0000000000000000000000000000000000000000000000602082015250565b5f61557760298361441c565b91506155828261551d565b604082019050919050565b5f6020820190508181035f8301526155a48161556b565b9050919050565b7f54726164696e67206973206e6f74206163746976652e000000000000000000005f82015250565b5f6155df60168361441c565b91506155ea826155ab565b602082019050919050565b5f6020820190508181035f83015261560c816155d3565b9050919050565b7f427579207472616e7366657220616d6f756e74206578636565647320746865205f8201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b5f61566d60358361441c565b915061567882615613565b604082019050919050565b5f6020820190508181035f83015261569a81615661565b9050919050565b7f4d61782077616c6c6574206578636565646564000000000000000000000000005f82015250565b5f6156d560138361441c565b91506156e0826156a1565b602082019050919050565b5f6020820190508181035f830152615702816156c9565b9050919050565b7f53656c6c207472616e7366657220616d6f756e742065786365656473207468655f8201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b5f61576360368361441c565b915061576e82615709565b604082019050919050565b5f6020820190508181035f83015261579081615757565b9050919050565b5f6157a18261451a565b91506157ac8361451a565b92508282039050818111156157c4576157c3614942565b5b92915050565b7f45524332303a206275726e2066726f6d20746865207a65726f206164647265735f8201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b5f61582460218361441c565b915061582f826157ca565b604082019050919050565b5f6020820190508181035f83015261585181615818565b9050919050565b7f45524332303a206275726e20616d6f756e7420657863656564732062616c616e5f8201527f6365000000000000000000000000000000000000000000000000000000000000602082015250565b5f6158b260228361441c565b91506158bd82615858565b604082019050919050565b5f6020820190508181035f8301526158df816158a6565b9050919050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320625f8201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b5f61594060268361441c565b915061594b826158e6565b604082019050919050565b5f6020820190508181035f83015261596d81615934565b9050919050565b5f6060820190506159875f8301866145e9565b61599460208301856145e9565b6159a160408301846145e9565b949350505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f81519050615a11816144f0565b92915050565b5f60208284031215615a2c57615a2b6144bc565b5b5f615a3984828501615a03565b91505092915050565b5f819050919050565b5f615a65615a60615a5b84615a42565b614611565b61451a565b9050919050565b615a7581615a4b565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b615aad816144df565b82525050565b5f615abe8383615aa4565b60208301905092915050565b5f602082019050919050565b5f615ae082615a7b565b615aea8185615a85565b9350615af583615a95565b805f5b83811015615b25578151615b0c8882615ab3565b9750615b1783615aca565b925050600181019050615af8565b5085935050505092915050565b5f60a082019050615b455f8301886145e9565b615b526020830187615a6c565b8181036040830152615b648186615ad6565b9050615b736060830185614700565b615b8060808301846145e9565b9695505050505050565b5f60c082019050615b9d5f830189614700565b615baa60208301886145e9565b615bb76040830187615a6c565b615bc46060830186615a6c565b615bd16080830185614700565b615bde60a08301846145e9565b979650505050505050565b5f81519050615bf781614523565b92915050565b5f805f60608486031215615c1457615c136144bc565b5b5f615c2186828701615be9565b9350506020615c3286828701615be9565b9250506040615c4386828701615be9565b915050925092509256fea264697066735822122042fe73858808771c0cb025a3eea972c49de0aeaab43189f0425ee1d41027111e64736f6c63430008140033

Deployed Bytecode Sourcemap

31343:17266:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9302:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11469:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32899:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32612:63;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32104:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31423:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10422:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32246:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32395:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36791:275;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12120:492;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32356:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31526:53;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10264:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13021:215;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31923:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31481;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31803:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32942:57;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39602:126;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31654:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47268:90;;;;;;;;;;;;;:::i;:::-;;48245:361;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32211:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31883:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10593:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2819:103;;;;;;;;;;;;;:::i;:::-;;36095:121;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37339:167;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47873:98;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31618:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39433:161;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46953:261;;;;;;;;;;;;;:::i;:::-;;37710:395;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35895:148;;;;;;;;;;;;;:::i;:::-;;2168:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37602:100;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;9521:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38716:304;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32177:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13739:413;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10933:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47979:258;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39224:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32833:57;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31843:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38526:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38113:405;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37074:257;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31688:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36286:497;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32321:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32070:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11171:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31730:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32140:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3077:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32283:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31770:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47366:374;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32435:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39736:113;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9302:100;9356:13;9389:5;9382:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9302:100;:::o;11469:169::-;11552:4;11569:39;11578:12;:10;:12::i;:::-;11592:7;11601:6;11569:8;:39::i;:::-;11626:4;11619:11;;11469:169;;;;:::o;32899:36::-;;;;;;;;;;;;;:::o;32612:63::-;;;;;;;;;;;;;;;;;;;;;;:::o;32104:29::-;;;;:::o;31423:51::-;;;:::o;10422:108::-;10483:7;10510:12;;10503:19;;10422:108;:::o;32246:30::-;;;;:::o;32395:33::-;;;;:::o;36791:275::-;2399:12;:10;:12::i;:::-;2388:23;;:7;:5;:7::i;:::-;:23;;;2380:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;36928:4:::1;36920;36915:1;36899:13;:11;:13::i;:::-;:17;;;;:::i;:::-;36898:26;;;;:::i;:::-;36897:35;;;;:::i;:::-;36887:6;:45;;36865:142;;;;;;;;;;;;:::i;:::-;;;;;;;;;37051:6;37041;:17;;;;:::i;:::-;37018:20;:40;;;;36791:275:::0;:::o;12120:492::-;12260:4;12277:36;12287:6;12295:9;12306:6;12277:9;:36::i;:::-;12326:24;12353:11;:19;12365:6;12353:19;;;;;;;;;;;;;;;:33;12373:12;:10;:12::i;:::-;12353:33;;;;;;;;;;;;;;;;12326:60;;12425:6;12405:16;:26;;12397:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;12512:57;12521:6;12529:12;:10;:12::i;:::-;12562:6;12543:16;:25;12512:8;:57::i;:::-;12600:4;12593:11;;;12120:492;;;;;:::o;32356:32::-;;;;:::o;31526:53::-;31572:6;31526:53;:::o;10264:93::-;10322:5;10347:2;10340:9;;10264:93;:::o;13021:215::-;13109:4;13126:80;13135:12;:10;:12::i;:::-;13149:7;13195:10;13158:11;:25;13170:12;:10;:12::i;:::-;13158:25;;;;;;;;;;;;;;;:34;13184:7;13158:34;;;;;;;;;;;;;;;;:47;;;;:::i;:::-;13126:8;:80::i;:::-;13224:4;13217:11;;13021:215;;;;:::o;31923:38::-;;;;;;;;;;;;;:::o;31481:::-;;;:::o;31803:33::-;;;;;;;;;;;;;:::o;32942:57::-;;;;;;;;;;;;;;;;;;;;;;:::o;39602:126::-;39668:4;39692:19;:28;39712:7;39692:28;;;;;;;;;;;;;;;;;;;;;;;;;39685:35;;39602:126;;;:::o;31654:25::-;;;;;;;;;;;;;:::o;47268:90::-;2399:12;:10;:12::i;:::-;2388:23;;:7;:5;:7::i;:::-;:23;;;2380:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47346:4:::1;47325:18;;:25;;;;;;;;;;;;;;;;;;47268:90::o:0;48245:361::-;48313:1;48304:6;:10;48296:52;;;;;;;;;;;;:::i;:::-;;;;;;;;;48414:46;48424:12;:10;:12::i;:::-;48446:4;48453:6;48414:9;:46::i;:::-;48522:28;48536:4;48543:6;48522:5;:28::i;:::-;48577:12;:10;:12::i;:::-;48564:34;;;48591:6;48564:34;;;;;;:::i;:::-;;;;;;;;48245:361;:::o;32211:28::-;;;;:::o;31883:31::-;;;;;;;;;;;;;:::o;10593:127::-;10667:7;10694:9;:18;10704:7;10694:18;;;;;;;;;;;;;;;;10687:25;;10593:127;;;:::o;2819:103::-;2399:12;:10;:12::i;:::-;2388:23;;:7;:5;:7::i;:::-;:23;;;2380:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2884:30:::1;2911:1;2884:18;:30::i;:::-;2819:103::o:0;36095:121::-;36147:4;2399:12;:10;:12::i;:::-;2388:23;;:7;:5;:7::i;:::-;:23;;;2380:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;36181:5:::1;36164:14;;:22;;;;;;;;;;;;;;;;;;36204:4;36197:11;;36095:121:::0;:::o;37339:167::-;2399:12;:10;:12::i;:::-;2388:23;;:7;:5;:7::i;:::-;:23;;;2380:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;37494:4:::1;37452:31;:39;37484:6;37452:39;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;37339:167:::0;;:::o;47873:98::-;2399:12;:10;:12::i;:::-;2388:23;;:7;:5;:7::i;:::-;:23;;;2380:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47958:5:::1;47937:11;:18;47949:5;47937:18;;;;;;;;;;;;;;;;:26;;;;;;;;;;;;;;;;;;47873:98:::0;:::o;31618:29::-;;;;;;;;;;;;;:::o;39433:161::-;2399:12;:10;:12::i;:::-;2388:23;;:7;:5;:7::i;:::-;:23;;;2380:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;39542:10:::1;;;;;;;;;;;39513:40;;39531:9;39513:40;;;;;;;;;;;;39577:9;39564:10;;:22;;;;;;;;;;;;;;;;;;39433:161:::0;:::o;46953:261::-;47033:1;47009:21;:25;47001:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;47069:12;47087:10;;;;;;;;;;;:15;;47124:21;47087:73;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47068:92;;;47179:7;47171:35;;;;;;;;;;;;:::i;:::-;;;;;;;;;46990:224;46953:261::o;37710:395::-;2399:12;:10;:12::i;:::-;2388:23;;:7;:5;:7::i;:::-;:23;;;2380:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;37877:12:::1;37860:14;:29;;;;37918:13;37900:15;:31;;;;37955:8;37942:10;:21;;;;38024:10;;38006:15;;37989:14;;:32;;;;:::i;:::-;:45;;;;:::i;:::-;37974:12;:60;;;;38069:1;38053:12;;:17;;38045:52;;;;;;;;;;;;:::i;:::-;;;;;;;;;37710:395:::0;;;:::o;35895:148::-;2399:12;:10;:12::i;:::-;2388:23;;:7;:5;:7::i;:::-;:23;;;2380:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;35966:4:::1;35950:13;;:20;;;;;;;;;;;;;;;;;;35995:4;35981:11;;:18;;;;;;;;;;;;;;;;;;36030:5;36010:17;;:25;;;;;;;;;;;;;;;;;;35895:148::o:0;2168:87::-;2214:7;2241:6;;;;;;;;;;;2234:13;;2168:87;:::o;37602:100::-;2399:12;:10;:12::i;:::-;2388:23;;:7;:5;:7::i;:::-;:23;;;2380:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;37687:7:::1;37673:11;;:21;;;;;;;;;;;;;;;;;;37602:100:::0;:::o;9521:104::-;9577:13;9610:7;9603:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9521:104;:::o;38716:304::-;2399:12;:10;:12::i;:::-;2388:23;;:7;:5;:7::i;:::-;:23;;;2380:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38860:13:::1;38852:21;;:4;:21;;::::0;38830:128:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;38971:41;39000:4;39006:5;38971:28;:41::i;:::-;38716:304:::0;;:::o;32177:25::-;;;;:::o;13739:413::-;13832:4;13849:24;13876:11;:25;13888:12;:10;:12::i;:::-;13876:25;;;;;;;;;;;;;;;:34;13902:7;13876:34;;;;;;;;;;;;;;;;13849:61;;13949:15;13929:16;:35;;13921:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;14042:67;14051:12;:10;:12::i;:::-;14065:7;14093:15;14074:16;:34;14042:8;:67::i;:::-;14140:4;14133:11;;;13739:413;;;;:::o;10933:175::-;11019:4;11036:42;11046:12;:10;:12::i;:::-;11060:9;11071:6;11036:9;:42::i;:::-;11096:4;11089:11;;10933:175;;;;:::o;47979:258::-;2399:12;:10;:12::i;:::-;2388:23;;:7;:5;:7::i;:::-;:23;;;2380:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48113:12:::1;48078:25;:32;48104:5;48078:32;;;;;;;;;;;;;;;;:47;;;;;;;;;;;;;;;;;;48136:36;48152:5;48159:12;48136:15;:36::i;:::-;48183:46;48209:5;48216:12;48183:25;:46::i;:::-;47979:258:::0;;:::o;39224:201::-;2399:12;:10;:12::i;:::-;2388:23;;:7;:5;:7::i;:::-;:23;;;2380:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;39357:14:::1;;;;;;;;;;;39316:56;;39338:17;39316:56;;;;;;;;;;;;39400:17;39383:14;;:34;;;;;;;;;;;;;;;;;;39224:201:::0;:::o;32833:57::-;;;;;;;;;;;;;;;;;;;;;;:::o;31843:33::-;;;;;;;;;;;;;:::o;38526:182::-;2399:12;:10;:12::i;:::-;2388:23;;:7;:5;:7::i;:::-;:23;;;2380:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38642:8:::1;38611:19;:28;38631:7;38611:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;38682:7;38666:34;;;38691:8;38666:34;;;;;;:::i;:::-;;;;;;;;38526:182:::0;;:::o;38113:405::-;2399:12;:10;:12::i;:::-;2388:23;;:7;:5;:7::i;:::-;:23;;;2380:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38282:12:::1;38264:15;:30;;;;38324:13;38305:16;:32;;;;38362:8;38348:11;:22;;;;38434:11;;38415:16;;38397:15;;:34;;;;:::i;:::-;:48;;;;:::i;:::-;38381:13;:64;;;;38481:1;38464:13;;:18;;38456:54;;;;;;;;;;;;:::i;:::-;;;;;;;;;38113:405:::0;;;:::o;37074:257::-;2399:12;:10;:12::i;:::-;2388:23;;:7;:5;:7::i;:::-;:23;;;2380:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;37215:4:::1;37207;37201:2;37185:13;:11;:13::i;:::-;:18;;;;:::i;:::-;37184:27;;;;:::i;:::-;37183:36;;;;:::i;:::-;37173:6;:46;;37151:132;;;;;;;;;;;;:::i;:::-;;;;;;;;;37316:6;37306;:17;;;;:::i;:::-;37294:9;:29;;;;37074:257:::0;:::o;31688:35::-;;;;:::o;36286:497::-;36394:4;2399:12;:10;:12::i;:::-;2388:23;;:7;:5;:7::i;:::-;:23;;;2380:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;36473:6:::1;36468:1;36452:13;:11;:13::i;:::-;:17;;;;:::i;:::-;36451:28;;;;:::i;:::-;36438:9;:41;;36416:144;;;;;;;;;;;;:::i;:::-;;;;;;;;;36628:4;36623:1;36607:13;:11;:13::i;:::-;:17;;;;:::i;:::-;36606:26;;;;:::i;:::-;36593:9;:39;;36571:141;;;;;;;;;;;;:::i;:::-;;;;;;;;;36744:9;36723:18;:30;;;;36771:4;36764:11;;36286:497:::0;;;:::o;32321:26::-;;;;:::o;32070:27::-;;;;:::o;11171:151::-;11260:7;11287:11;:18;11299:5;11287:18;;;;;;;;;;;;;;;:27;11306:7;11287:27;;;;;;;;;;;;;;;;11280:34;;11171:151;;;;:::o;31730:33::-;;;;:::o;32140:30::-;;;;:::o;3077:201::-;2399:12;:10;:12::i;:::-;2388:23;;:7;:5;:7::i;:::-;:23;;;2380:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;3186:1:::1;3166:22;;:8;:22;;::::0;3158:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;3242:28;3261:8;3242:18;:28::i;:::-;3077:201:::0;:::o;32283:31::-;;;;:::o;31770:24::-;;;;:::o;47366:374::-;2399:12;:10;:12::i;:::-;2388:23;;:7;:5;:7::i;:::-;:23;;;2380:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47437:18:::1;;;;;;;;;;;47436:19;47428:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;47543:13;47526:31;;:5;:31;;;;:95;;;;;47578:42;47561:60;;:5;:60;;;;47526:95;47504:192;;;;;;;;;;;;:::i;:::-;;;;;;;;;47728:4;47707:11;:18;47719:5;47707:18;;;;;;;;;;;;;;;;:25;;;;;;;;;;;;;;;;;;47366:374:::0;:::o;32435:28::-;;;;:::o;39736:113::-;39797:4;39821:11;:20;39833:7;39821:20;;;;;;;;;;;;;;;;;;;;;;;;;39814:27;;39736:113;;;:::o;1035:98::-;1088:7;1115:10;1108:17;;1035:98;:::o;17423:380::-;17576:1;17559:19;;:5;:19;;;17551:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;17657:1;17638:21;;:7;:21;;;17630:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;17741:6;17711:11;:18;17723:5;17711:18;;;;;;;;;;;;;;;:27;17730:7;17711:27;;;;;;;;;;;;;;;:36;;;;17779:7;17763:32;;17772:5;17763:32;;;17788:6;17763:32;;;;;;:::i;:::-;;;;;;;;17423:380;;;:::o;39857:4189::-;40005:1;39989:18;;:4;:18;;;39981:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;40082:1;40068:16;;:2;:16;;;40060:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;40144:11;:17;40156:4;40144:17;;;;;;;;;;;;;;;;;;;;;;;;;40143:18;40135:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;40203:11;:15;40215:2;40203:15;;;;;;;;;;;;;;;;;;;;;;;;;40202:16;40194:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;40259:17;;;;;;;;;;;40255:135;;;40301:25;:31;40327:4;40301:31;;;;;;;;;;;;;;;;;;;;;;;;;40293:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;40255:135;40416:1;40406:6;:11;40402:93;;40434:28;40450:4;40456:2;40460:1;40434:15;:28::i;:::-;40477:7;;40402:93;40511:14;;;;;;;;;;;40507:1694;;;40572:7;:5;:7::i;:::-;40564:15;;:4;:15;;;;:49;;;;;40606:7;:5;:7::i;:::-;40600:13;;:2;:13;;;;40564:49;:86;;;;;40648:1;40634:16;;:2;:16;;;;40564:86;:128;;;;;40685:6;40671:21;;:2;:21;;;;40564:128;:158;;;;;40714:8;;;;;;;;;;;40713:9;40564:158;40542:1648;;;40762:13;;;;;;;;;;;40757:223;;40834:19;:25;40854:4;40834:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;40863:19;:23;40883:2;40863:23;;;;;;;;;;;;;;;;;;;;;;;;;40834:52;40800:160;;;;;;;;;;;;:::i;:::-;;;;;;;;;40757:223;41054:25;:31;41080:4;41054:31;;;;;;;;;;;;;;;;;;;;;;;;;:92;;;;;41111:31;:35;41143:2;41111:35;;;;;;;;;;;;;;;;;;;;;;;;;41110:36;41054:92;41028:1147;;;41233:20;;41223:6;:30;;41189:169;;;;;;;;;;;;:::i;:::-;;;;;;;;;41441:9;;41424:13;41434:2;41424:9;:13::i;:::-;41415:6;:22;;;;:::i;:::-;:35;;41381:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;41028:1147;;;41619:25;:29;41645:2;41619:29;;;;;;;;;;;;;;;;;;;;;;;;;:92;;;;;41674:31;:37;41706:4;41674:37;;;;;;;;;;;;;;;;;;;;;;;;;41673:38;41619:92;41593:582;;;41798:20;;41788:6;:30;;41754:170;;;;;;;;;;;;:::i;:::-;;;;;;;;;41593:582;;;41955:31;:35;41987:2;41955:35;;;;;;;;;;;;;;;;;;;;;;;;;41950:225;;42075:9;;42058:13;42068:2;42058:9;:13::i;:::-;42049:6;:22;;;;:::i;:::-;:35;;42015:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;41950:225;41593:582;41028:1147;40542:1648;40507:1694;42213:28;42244:24;42262:4;42244:9;:24::i;:::-;42213:55;;42281:12;42320:18;;42296:20;:42;;42281:57;;42369:7;:35;;;;;42393:11;;;;;;;;;;;42369:35;:61;;;;;42422:8;;;;;;;;;;;42421:9;42369:61;:110;;;;;42448:25;:31;42474:4;42448:31;;;;;;;;;;;;;;;;;;;;;;;;;42447:32;42369:110;:153;;;;;42497:19;:25;42517:4;42497:25;;;;;;;;;;;;;;;;;;;;;;;;;42496:26;42369:153;:194;;;;;42540:19;:23;42560:2;42540:23;;;;;;;;;;;;;;;;;;;;;;;;;42539:24;42369:194;42351:326;;;42601:4;42590:8;;:15;;;;;;;;;;;;;;;;;;42622:10;:8;:10::i;:::-;42660:5;42649:8;;:16;;;;;;;;;;;;;;;;;;42351:326;42689:12;42705:8;;;;;;;;;;;42704:9;42689:24;;42815:19;:25;42835:4;42815:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;42844:19;:23;42864:2;42844:23;;;;;;;;;;;;;;;;;;;;;;;;;42815:52;42811:100;;;42894:5;42884:15;;42811:100;42923:12;43028:7;43024:969;;;43080:25;:29;43106:2;43080:29;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;;43129:1;43113:13;;:17;43080:50;43076:768;;;43158:34;43188:3;43158:25;43169:13;;43158:6;:10;;:25;;;;:::i;:::-;:29;;:34;;;;:::i;:::-;43151:41;;43261:13;;43241:16;;43234:4;:23;;;;:::i;:::-;43233:41;;;;:::i;:::-;43211:18;;:63;;;;;;;:::i;:::-;;;;;;;;43333:13;;43318:11;;43311:4;:18;;;;:::i;:::-;43310:36;;;;:::i;:::-;43293:13;;:53;;;;;;;:::i;:::-;;;;;;;;43413:13;;43394:15;;43387:4;:22;;;;:::i;:::-;43386:40;;;;:::i;:::-;43365:17;;:61;;;;;;;:::i;:::-;;;;;;;;43076:768;;;43488:25;:31;43514:4;43488:31;;;;;;;;;;;;;;;;;;;;;;;;;:51;;;;;43538:1;43523:12;;:16;43488:51;43484:360;;;43567:33;43596:3;43567:24;43578:12;;43567:6;:10;;:24;;;;:::i;:::-;:28;;:33;;;;:::i;:::-;43560:40;;43668:12;;43649:15;;43642:4;:22;;;;:::i;:::-;43641:39;;;;:::i;:::-;43619:18;;:61;;;;;;;:::i;:::-;;;;;;;;43738:12;;43724:10;;43717:4;:17;;;;:::i;:::-;43716:34;;;;:::i;:::-;43699:13;;:51;;;;;;;:::i;:::-;;;;;;;;43816:12;;43798:14;;43791:4;:21;;;;:::i;:::-;43790:38;;;;:::i;:::-;43769:17;;:59;;;;;;;:::i;:::-;;;;;;;;43484:360;43076:768;43871:1;43864:4;:8;43860:91;;;43893:42;43909:4;43923;43930;43893:15;:42::i;:::-;43860:91;43977:4;43967:14;;;;;:::i;:::-;;;43024:969;44005:33;44021:4;44027:2;44031:6;44005:15;:33::i;:::-;39970:4076;;;;39857:4189;;;;:::o;16394:591::-;16497:1;16478:21;;:7;:21;;;16470:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;16550:49;16571:7;16588:1;16592:6;16550:20;:49::i;:::-;16612:22;16637:9;:18;16647:7;16637:18;;;;;;;;;;;;;;;;16612:43;;16692:6;16674:14;:24;;16666:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;16811:6;16794:14;:23;16773:9;:18;16783:7;16773:18;;;;;;;;;;;;;;;:44;;;;16855:6;16839:12;;:22;;;;;;;:::i;:::-;;;;;;;;16905:1;16879:37;;16888:7;16879:37;;;16909:6;16879:37;;;;;;:::i;:::-;;;;;;;;16929:48;16949:7;16966:1;16970:6;16929:19;:48::i;:::-;16459:526;16394:591;;:::o;3438:191::-;3512:16;3531:6;;;;;;;;;;;3512:25;;3557:8;3548:6;;:17;;;;;;;;;;;;;;;;;;3612:8;3581:40;;3602:8;3581:40;;;;;;;;;;;;3501:128;3438:191;:::o;39028:188::-;39145:5;39111:25;:31;39137:4;39111:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;39202:5;39168:40;;39196:4;39168:40;;;;;;;;;;;;39028:188;;:::o;14642:733::-;14800:1;14782:20;;:6;:20;;;14774:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;14884:1;14863:23;;:9;:23;;;14855:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;14939:47;14960:6;14968:9;14979:6;14939:20;:47::i;:::-;14999:21;15023:9;:17;15033:6;15023:17;;;;;;;;;;;;;;;;14999:41;;15076:6;15059:13;:23;;15051:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;15197:6;15181:13;:22;15161:9;:17;15171:6;15161:17;;;;;;;;;;;;;;;:42;;;;15249:6;15225:9;:20;15235:9;15225:20;;;;;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;15290:9;15273:35;;15282:6;15273:35;;;15301:6;15273:35;;;;;;:::i;:::-;;;;;;;;15321:46;15341:6;15349:9;15360:6;15321:19;:46::i;:::-;14763:612;14642:733;;;:::o;45172:1773::-;45211:23;45237:24;45255:4;45237:9;:24::i;:::-;45211:50;;45272:25;45367:13;;45334:17;;45300:18;;:51;;;;:::i;:::-;:80;;;;:::i;:::-;45272:108;;45391:12;45439:1;45420:15;:20;:46;;;;45465:1;45444:17;:22;45420:46;45416:85;;;45483:7;;;;;45416:85;45556:2;45535:18;;:23;;;;:::i;:::-;45517:15;:41;45513:115;;;45614:2;45593:18;;:23;;;;:::i;:::-;45575:41;;45513:115;45689:23;45802:1;45769:17;45734:18;;45716:15;:36;;;;:::i;:::-;45715:71;;;;:::i;:::-;:88;;;;:::i;:::-;45689:114;;45814:26;45843:36;45863:15;45843;:19;;:36;;;;:::i;:::-;45814:65;;45892:25;45920:21;45892:49;;45954:36;45971:18;45954:16;:36::i;:::-;46003:18;46024:44;46050:17;46024:21;:25;;:44;;;;:::i;:::-;46003:65;;46081:22;46106:83;46186:1;46165:18;;:22;;;;:::i;:::-;46144:17;:44;;;;:::i;:::-;46106:33;46121:17;;46106:10;:14;;:33;;;;:::i;:::-;:37;;:83;;;;:::i;:::-;46081:108;;46210:18;46231:79;46307:1;46286:18;;:22;;;;:::i;:::-;46265:17;:44;;;;:::i;:::-;46231:29;46246:13;;46231:10;:14;;:29;;;;:::i;:::-;:33;;:79;;;;:::i;:::-;46210:100;;46323:23;46379:10;46362:14;46349:10;:27;;;;:::i;:::-;:40;;;;:::i;:::-;46323:66;;46423:1;46402:18;:22;;;;46455:1;46435:17;:21;;;;46483:1;46467:13;:17;;;;46519:10;;;;;;;;;;;46511:24;;46543:10;46511:47;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46497:61;;;;;46593:1;46575:15;:19;:42;;;;;46616:1;46598:15;:19;46575:42;46571:278;;;46634:46;46647:15;46664;46634:12;:46::i;:::-;46700:137;46733:18;46770:15;46804:18;;46700:137;;;;;;;;:::i;:::-;;;;;;;;46571:278;46883:14;;;;;;;;;;;46875:28;;46911:21;46875:62;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46861:76;;;;;45200:1745;;;;;;;;;;45172:1773;:::o;22555:98::-;22613:7;22644:1;22640;:5;;;;:::i;:::-;22633:12;;22555:98;;;;:::o;22954:::-;23012:7;23043:1;23039;:5;;;;:::i;:::-;23032:12;;22954:98;;;;:::o;18403:125::-;;;;:::o;19132:124::-;;;;:::o;22198:98::-;22256:7;22287:1;22283;:5;;;;:::i;:::-;22276:12;;22198:98;;;;:::o;44054:589::-;44180:21;44218:1;44204:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44180:40;;44249:4;44231;44236:1;44231:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;44275:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;44265:4;44270:1;44265:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;44310:62;44327:4;44342:15;44360:11;44310:8;:62::i;:::-;44411:15;:66;;;44492:11;44518:1;44562:4;44589;44609:15;44411:224;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44109:534;44054:589;:::o;44651:513::-;44799:62;44816:4;44831:15;44849:11;44799:8;:62::i;:::-;44904:15;:31;;;44943:9;44976:4;44996:11;45022:1;45065;45108:7;:5;:7::i;:::-;45130:15;44904:252;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;44651:513;;:::o;7:99:1:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:246::-;368:1;378:113;392:6;389:1;386:13;378:113;;;477:1;472:3;468:11;462:18;458:1;453:3;449:11;442:39;414:2;411:1;407:10;402:15;;378:113;;;525:1;516:6;511:3;507:16;500:27;349:184;287:246;;;:::o;539:102::-;580:6;631:2;627:7;622:2;615:5;611:14;607:28;597:38;;539:102;;;:::o;647:377::-;735:3;763:39;796:5;763:39;:::i;:::-;818:71;882:6;877:3;818:71;:::i;:::-;811:78;;898:65;956:6;951:3;944:4;937:5;933:16;898:65;:::i;:::-;988:29;1010:6;988:29;:::i;:::-;983:3;979:39;972:46;;739:285;647:377;;;;:::o;1030:313::-;1143:4;1181:2;1170:9;1166:18;1158:26;;1230:9;1224:4;1220:20;1216:1;1205:9;1201:17;1194:47;1258:78;1331:4;1322:6;1258:78;:::i;:::-;1250:86;;1030:313;;;;:::o;1430:117::-;1539:1;1536;1529:12;1676:126;1713:7;1753:42;1746:5;1742:54;1731:65;;1676:126;;;:::o;1808:96::-;1845:7;1874:24;1892:5;1874:24;:::i;:::-;1863:35;;1808:96;;;:::o;1910:122::-;1983:24;2001:5;1983:24;:::i;:::-;1976:5;1973:35;1963:63;;2022:1;2019;2012:12;1963:63;1910:122;:::o;2038:139::-;2084:5;2122:6;2109:20;2100:29;;2138:33;2165:5;2138:33;:::i;:::-;2038:139;;;;:::o;2183:77::-;2220:7;2249:5;2238:16;;2183:77;;;:::o;2266:122::-;2339:24;2357:5;2339:24;:::i;:::-;2332:5;2329:35;2319:63;;2378:1;2375;2368:12;2319:63;2266:122;:::o;2394:139::-;2440:5;2478:6;2465:20;2456:29;;2494:33;2521:5;2494:33;:::i;:::-;2394:139;;;;:::o;2539:474::-;2607:6;2615;2664:2;2652:9;2643:7;2639:23;2635:32;2632:119;;;2670:79;;:::i;:::-;2632:119;2790:1;2815:53;2860:7;2851:6;2840:9;2836:22;2815:53;:::i;:::-;2805:63;;2761:117;2917:2;2943:53;2988:7;2979:6;2968:9;2964:22;2943:53;:::i;:::-;2933:63;;2888:118;2539:474;;;;;:::o;3019:90::-;3053:7;3096:5;3089:13;3082:21;3071:32;;3019:90;;;:::o;3115:109::-;3196:21;3211:5;3196:21;:::i;:::-;3191:3;3184:34;3115:109;;:::o;3230:210::-;3317:4;3355:2;3344:9;3340:18;3332:26;;3368:65;3430:1;3419:9;3415:17;3406:6;3368:65;:::i;:::-;3230:210;;;;:::o;3446:329::-;3505:6;3554:2;3542:9;3533:7;3529:23;3525:32;3522:119;;;3560:79;;:::i;:::-;3522:119;3680:1;3705:53;3750:7;3741:6;3730:9;3726:22;3705:53;:::i;:::-;3695:63;;3651:117;3446:329;;;;:::o;3781:118::-;3868:24;3886:5;3868:24;:::i;:::-;3863:3;3856:37;3781:118;;:::o;3905:222::-;3998:4;4036:2;4025:9;4021:18;4013:26;;4049:71;4117:1;4106:9;4102:17;4093:6;4049:71;:::i;:::-;3905:222;;;;:::o;4133:60::-;4161:3;4182:5;4175:12;;4133:60;;;:::o;4199:142::-;4249:9;4282:53;4300:34;4309:24;4327:5;4309:24;:::i;:::-;4300:34;:::i;:::-;4282:53;:::i;:::-;4269:66;;4199:142;;;:::o;4347:126::-;4397:9;4430:37;4461:5;4430:37;:::i;:::-;4417:50;;4347:126;;;:::o;4479:153::-;4556:9;4589:37;4620:5;4589:37;:::i;:::-;4576:50;;4479:153;;;:::o;4638:185::-;4752:64;4810:5;4752:64;:::i;:::-;4747:3;4740:77;4638:185;;:::o;4829:276::-;4949:4;4987:2;4976:9;4972:18;4964:26;;5000:98;5095:1;5084:9;5080:17;5071:6;5000:98;:::i;:::-;4829:276;;;;:::o;5111:329::-;5170:6;5219:2;5207:9;5198:7;5194:23;5190:32;5187:119;;;5225:79;;:::i;:::-;5187:119;5345:1;5370:53;5415:7;5406:6;5395:9;5391:22;5370:53;:::i;:::-;5360:63;;5316:117;5111:329;;;;:::o;5446:619::-;5523:6;5531;5539;5588:2;5576:9;5567:7;5563:23;5559:32;5556:119;;;5594:79;;:::i;:::-;5556:119;5714:1;5739:53;5784:7;5775:6;5764:9;5760:22;5739:53;:::i;:::-;5729:63;;5685:117;5841:2;5867:53;5912:7;5903:6;5892:9;5888:22;5867:53;:::i;:::-;5857:63;;5812:118;5969:2;5995:53;6040:7;6031:6;6020:9;6016:22;5995:53;:::i;:::-;5985:63;;5940:118;5446:619;;;;;:::o;6071:118::-;6158:24;6176:5;6158:24;:::i;:::-;6153:3;6146:37;6071:118;;:::o;6195:222::-;6288:4;6326:2;6315:9;6311:18;6303:26;;6339:71;6407:1;6396:9;6392:17;6383:6;6339:71;:::i;:::-;6195:222;;;;:::o;6423:86::-;6458:7;6498:4;6491:5;6487:16;6476:27;;6423:86;;;:::o;6515:112::-;6598:22;6614:5;6598:22;:::i;:::-;6593:3;6586:35;6515:112;;:::o;6633:214::-;6722:4;6760:2;6749:9;6745:18;6737:26;;6773:67;6837:1;6826:9;6822:17;6813:6;6773:67;:::i;:::-;6633:214;;;;:::o;6853:116::-;6923:21;6938:5;6923:21;:::i;:::-;6916:5;6913:32;6903:60;;6959:1;6956;6949:12;6903:60;6853:116;:::o;6975:133::-;7018:5;7056:6;7043:20;7034:29;;7072:30;7096:5;7072:30;:::i;:::-;6975:133;;;;:::o;7114:468::-;7179:6;7187;7236:2;7224:9;7215:7;7211:23;7207:32;7204:119;;;7242:79;;:::i;:::-;7204:119;7362:1;7387:53;7432:7;7423:6;7412:9;7408:22;7387:53;:::i;:::-;7377:63;;7333:117;7489:2;7515:50;7557:7;7548:6;7537:9;7533:22;7515:50;:::i;:::-;7505:60;;7460:115;7114:468;;;;;:::o;7588:619::-;7665:6;7673;7681;7730:2;7718:9;7709:7;7705:23;7701:32;7698:119;;;7736:79;;:::i;:::-;7698:119;7856:1;7881:53;7926:7;7917:6;7906:9;7902:22;7881:53;:::i;:::-;7871:63;;7827:117;7983:2;8009:53;8054:7;8045:6;8034:9;8030:22;8009:53;:::i;:::-;7999:63;;7954:118;8111:2;8137:53;8182:7;8173:6;8162:9;8158:22;8137:53;:::i;:::-;8127:63;;8082:118;7588:619;;;;;:::o;8213:323::-;8269:6;8318:2;8306:9;8297:7;8293:23;8289:32;8286:119;;;8324:79;;:::i;:::-;8286:119;8444:1;8469:50;8511:7;8502:6;8491:9;8487:22;8469:50;:::i;:::-;8459:60;;8415:114;8213:323;;;;:::o;8542:474::-;8610:6;8618;8667:2;8655:9;8646:7;8642:23;8638:32;8635:119;;;8673:79;;:::i;:::-;8635:119;8793:1;8818:53;8863:7;8854:6;8843:9;8839:22;8818:53;:::i;:::-;8808:63;;8764:117;8920:2;8946:53;8991:7;8982:6;8971:9;8967:22;8946:53;:::i;:::-;8936:63;;8891:118;8542:474;;;;;:::o;9022:180::-;9070:77;9067:1;9060:88;9167:4;9164:1;9157:15;9191:4;9188:1;9181:15;9208:320;9252:6;9289:1;9283:4;9279:12;9269:22;;9336:1;9330:4;9326:12;9357:18;9347:81;;9413:4;9405:6;9401:17;9391:27;;9347:81;9475:2;9467:6;9464:14;9444:18;9441:38;9438:84;;9494:18;;:::i;:::-;9438:84;9259:269;9208:320;;;:::o;9534:182::-;9674:34;9670:1;9662:6;9658:14;9651:58;9534:182;:::o;9722:366::-;9864:3;9885:67;9949:2;9944:3;9885:67;:::i;:::-;9878:74;;9961:93;10050:3;9961:93;:::i;:::-;10079:2;10074:3;10070:12;10063:19;;9722:366;;;:::o;10094:419::-;10260:4;10298:2;10287:9;10283:18;10275:26;;10347:9;10341:4;10337:20;10333:1;10322:9;10318:17;10311:47;10375:131;10501:4;10375:131;:::i;:::-;10367:139;;10094:419;;;:::o;10519:180::-;10567:77;10564:1;10557:88;10664:4;10661:1;10654:15;10688:4;10685:1;10678:15;10705:410;10745:7;10768:20;10786:1;10768:20;:::i;:::-;10763:25;;10802:20;10820:1;10802:20;:::i;:::-;10797:25;;10857:1;10854;10850:9;10879:30;10897:11;10879:30;:::i;:::-;10868:41;;11058:1;11049:7;11045:15;11042:1;11039:22;11019:1;11012:9;10992:83;10969:139;;11088:18;;:::i;:::-;10969:139;10753:362;10705:410;;;;:::o;11121:180::-;11169:77;11166:1;11159:88;11266:4;11263:1;11256:15;11290:4;11287:1;11280:15;11307:185;11347:1;11364:20;11382:1;11364:20;:::i;:::-;11359:25;;11398:20;11416:1;11398:20;:::i;:::-;11393:25;;11437:1;11427:35;;11442:18;;:::i;:::-;11427:35;11484:1;11481;11477:9;11472:14;;11307:185;;;;:::o;11498:234::-;11638:34;11634:1;11626:6;11622:14;11615:58;11707:17;11702:2;11694:6;11690:15;11683:42;11498:234;:::o;11738:366::-;11880:3;11901:67;11965:2;11960:3;11901:67;:::i;:::-;11894:74;;11977:93;12066:3;11977:93;:::i;:::-;12095:2;12090:3;12086:12;12079:19;;11738:366;;;:::o;12110:419::-;12276:4;12314:2;12303:9;12299:18;12291:26;;12363:9;12357:4;12353:20;12349:1;12338:9;12334:17;12327:47;12391:131;12517:4;12391:131;:::i;:::-;12383:139;;12110:419;;;:::o;12535:227::-;12675:34;12671:1;12663:6;12659:14;12652:58;12744:10;12739:2;12731:6;12727:15;12720:35;12535:227;:::o;12768:366::-;12910:3;12931:67;12995:2;12990:3;12931:67;:::i;:::-;12924:74;;13007:93;13096:3;13007:93;:::i;:::-;13125:2;13120:3;13116:12;13109:19;;12768:366;;;:::o;13140:419::-;13306:4;13344:2;13333:9;13329:18;13321:26;;13393:9;13387:4;13383:20;13379:1;13368:9;13364:17;13357:47;13421:131;13547:4;13421:131;:::i;:::-;13413:139;;13140:419;;;:::o;13565:191::-;13605:3;13624:20;13642:1;13624:20;:::i;:::-;13619:25;;13658:20;13676:1;13658:20;:::i;:::-;13653:25;;13701:1;13698;13694:9;13687:16;;13722:3;13719:1;13716:10;13713:36;;;13729:18;;:::i;:::-;13713:36;13565:191;;;;:::o;13762:179::-;13902:31;13898:1;13890:6;13886:14;13879:55;13762:179;:::o;13947:366::-;14089:3;14110:67;14174:2;14169:3;14110:67;:::i;:::-;14103:74;;14186:93;14275:3;14186:93;:::i;:::-;14304:2;14299:3;14295:12;14288:19;;13947:366;;;:::o;14319:419::-;14485:4;14523:2;14512:9;14508:18;14500:26;;14572:9;14566:4;14562:20;14558:1;14547:9;14543:17;14536:47;14600:131;14726:4;14600:131;:::i;:::-;14592:139;;14319:419;;;:::o;14744:168::-;14884:20;14880:1;14872:6;14868:14;14861:44;14744:168;:::o;14918:366::-;15060:3;15081:67;15145:2;15140:3;15081:67;:::i;:::-;15074:74;;15157:93;15246:3;15157:93;:::i;:::-;15275:2;15270:3;15266:12;15259:19;;14918:366;;;:::o;15290:419::-;15456:4;15494:2;15483:9;15479:18;15471:26;;15543:9;15537:4;15533:20;15529:1;15518:9;15514:17;15507:47;15571:131;15697:4;15571:131;:::i;:::-;15563:139;;15290:419;;;:::o;15715:147::-;15816:11;15853:3;15838:18;;15715:147;;;;:::o;15868:114::-;;:::o;15988:398::-;16147:3;16168:83;16249:1;16244:3;16168:83;:::i;:::-;16161:90;;16260:93;16349:3;16260:93;:::i;:::-;16378:1;16373:3;16369:11;16362:18;;15988:398;;;:::o;16392:379::-;16576:3;16598:147;16741:3;16598:147;:::i;:::-;16591:154;;16762:3;16755:10;;16392:379;;;:::o;16777:165::-;16917:17;16913:1;16905:6;16901:14;16894:41;16777:165;:::o;16948:366::-;17090:3;17111:67;17175:2;17170:3;17111:67;:::i;:::-;17104:74;;17187:93;17276:3;17187:93;:::i;:::-;17305:2;17300:3;17296:12;17289:19;;16948:366;;;:::o;17320:419::-;17486:4;17524:2;17513:9;17509:18;17501:26;;17573:9;17567:4;17563:20;17559:1;17548:9;17544:17;17537:47;17601:131;17727:4;17601:131;:::i;:::-;17593:139;;17320:419;;;:::o;17745:172::-;17885:24;17881:1;17873:6;17869:14;17862:48;17745:172;:::o;17923:366::-;18065:3;18086:67;18150:2;18145:3;18086:67;:::i;:::-;18079:74;;18162:93;18251:3;18162:93;:::i;:::-;18280:2;18275:3;18271:12;18264:19;;17923:366;;;:::o;18295:419::-;18461:4;18499:2;18488:9;18484:18;18476:26;;18548:9;18542:4;18538:20;18534:1;18523:9;18519:17;18512:47;18576:131;18702:4;18576:131;:::i;:::-;18568:139;;18295:419;;;:::o;18720:244::-;18860:34;18856:1;18848:6;18844:14;18837:58;18929:27;18924:2;18916:6;18912:15;18905:52;18720:244;:::o;18970:366::-;19112:3;19133:67;19197:2;19192:3;19133:67;:::i;:::-;19126:74;;19209:93;19298:3;19209:93;:::i;:::-;19327:2;19322:3;19318:12;19311:19;;18970:366;;;:::o;19342:419::-;19508:4;19546:2;19535:9;19531:18;19523:26;;19595:9;19589:4;19585:20;19581:1;19570:9;19566:17;19559:47;19623:131;19749:4;19623:131;:::i;:::-;19615:139;;19342:419;;;:::o;19767:224::-;19907:34;19903:1;19895:6;19891:14;19884:58;19976:7;19971:2;19963:6;19959:15;19952:32;19767:224;:::o;19997:366::-;20139:3;20160:67;20224:2;20219:3;20160:67;:::i;:::-;20153:74;;20236:93;20325:3;20236:93;:::i;:::-;20354:2;20349:3;20345:12;20338:19;;19997:366;;;:::o;20369:419::-;20535:4;20573:2;20562:9;20558:18;20550:26;;20622:9;20616:4;20612:20;20608:1;20597:9;20593:17;20586:47;20650:131;20776:4;20650:131;:::i;:::-;20642:139;;20369:419;;;:::o;20794:173::-;20934:25;20930:1;20922:6;20918:14;20911:49;20794:173;:::o;20973:366::-;21115:3;21136:67;21200:2;21195:3;21136:67;:::i;:::-;21129:74;;21212:93;21301:3;21212:93;:::i;:::-;21330:2;21325:3;21321:12;21314:19;;20973:366;;;:::o;21345:419::-;21511:4;21549:2;21538:9;21534:18;21526:26;;21598:9;21592:4;21588:20;21584:1;21573:9;21569:17;21562:47;21626:131;21752:4;21626:131;:::i;:::-;21618:139;;21345:419;;;:::o;21770:223::-;21910:34;21906:1;21898:6;21894:14;21887:58;21979:6;21974:2;21966:6;21962:15;21955:31;21770:223;:::o;21999:366::-;22141:3;22162:67;22226:2;22221:3;22162:67;:::i;:::-;22155:74;;22238:93;22327:3;22238:93;:::i;:::-;22356:2;22351:3;22347:12;22340:19;;21999:366;;;:::o;22371:419::-;22537:4;22575:2;22564:9;22560:18;22552:26;;22624:9;22618:4;22614:20;22610:1;22599:9;22595:17;22588:47;22652:131;22778:4;22652:131;:::i;:::-;22644:139;;22371:419;;;:::o;22796:240::-;22936:34;22932:1;22924:6;22920:14;22913:58;23005:23;23000:2;22992:6;22988:15;22981:48;22796:240;:::o;23042:366::-;23184:3;23205:67;23269:2;23264:3;23205:67;:::i;:::-;23198:74;;23281:93;23370:3;23281:93;:::i;:::-;23399:2;23394:3;23390:12;23383:19;;23042:366;;;:::o;23414:419::-;23580:4;23618:2;23607:9;23603:18;23595:26;;23667:9;23661:4;23657:20;23653:1;23642:9;23638:17;23631:47;23695:131;23821:4;23695:131;:::i;:::-;23687:139;;23414:419;;;:::o;23839:239::-;23979:34;23975:1;23967:6;23963:14;23956:58;24048:22;24043:2;24035:6;24031:15;24024:47;23839:239;:::o;24084:366::-;24226:3;24247:67;24311:2;24306:3;24247:67;:::i;:::-;24240:74;;24323:93;24412:3;24323:93;:::i;:::-;24441:2;24436:3;24432:12;24425:19;;24084:366;;;:::o;24456:419::-;24622:4;24660:2;24649:9;24645:18;24637:26;;24709:9;24703:4;24699:20;24695:1;24684:9;24680:17;24673:47;24737:131;24863:4;24737:131;:::i;:::-;24729:139;;24456:419;;;:::o;24881:225::-;25021:34;25017:1;25009:6;25005:14;24998:58;25090:8;25085:2;25077:6;25073:15;25066:33;24881:225;:::o;25112:366::-;25254:3;25275:67;25339:2;25334:3;25275:67;:::i;:::-;25268:74;;25351:93;25440:3;25351:93;:::i;:::-;25469:2;25464:3;25460:12;25453:19;;25112:366;;;:::o;25484:419::-;25650:4;25688:2;25677:9;25673:18;25665:26;;25737:9;25731:4;25727:20;25723:1;25712:9;25708:17;25701:47;25765:131;25891:4;25765:131;:::i;:::-;25757:139;;25484:419;;;:::o;25909:220::-;26049:34;26045:1;26037:6;26033:14;26026:58;26118:3;26113:2;26105:6;26101:15;26094:28;25909:220;:::o;26135:366::-;26277:3;26298:67;26362:2;26357:3;26298:67;:::i;:::-;26291:74;;26374:93;26463:3;26374:93;:::i;:::-;26492:2;26487:3;26483:12;26476:19;;26135:366;;;:::o;26507:419::-;26673:4;26711:2;26700:9;26696:18;26688:26;;26760:9;26754:4;26750:20;26746:1;26735:9;26731:17;26724:47;26788:131;26914:4;26788:131;:::i;:::-;26780:139;;26507:419;;;:::o;26932:233::-;27072:34;27068:1;27060:6;27056:14;27049:58;27141:16;27136:2;27128:6;27124:15;27117:41;26932:233;:::o;27171:366::-;27313:3;27334:67;27398:2;27393:3;27334:67;:::i;:::-;27327:74;;27410:93;27499:3;27410:93;:::i;:::-;27528:2;27523:3;27519:12;27512:19;;27171:366;;;:::o;27543:419::-;27709:4;27747:2;27736:9;27732:18;27724:26;;27796:9;27790:4;27786:20;27782:1;27771:9;27767:17;27760:47;27824:131;27950:4;27824:131;:::i;:::-;27816:139;;27543:419;;;:::o;27968:223::-;28108:34;28104:1;28096:6;28092:14;28085:58;28177:6;28172:2;28164:6;28160:15;28153:31;27968:223;:::o;28197:366::-;28339:3;28360:67;28424:2;28419:3;28360:67;:::i;:::-;28353:74;;28436:93;28525:3;28436:93;:::i;:::-;28554:2;28549:3;28545:12;28538:19;;28197:366;;;:::o;28569:419::-;28735:4;28773:2;28762:9;28758:18;28750:26;;28822:9;28816:4;28812:20;28808:1;28797:9;28793:17;28786:47;28850:131;28976:4;28850:131;:::i;:::-;28842:139;;28569:419;;;:::o;28994:221::-;29134:34;29130:1;29122:6;29118:14;29111:58;29203:4;29198:2;29190:6;29186:15;29179:29;28994:221;:::o;29221:366::-;29363:3;29384:67;29448:2;29443:3;29384:67;:::i;:::-;29377:74;;29460:93;29549:3;29460:93;:::i;:::-;29578:2;29573:3;29569:12;29562:19;;29221:366;;;:::o;29593:419::-;29759:4;29797:2;29786:9;29782:18;29774:26;;29846:9;29840:4;29836:20;29832:1;29821:9;29817:17;29810:47;29874:131;30000:4;29874:131;:::i;:::-;29866:139;;29593:419;;;:::o;30018:224::-;30158:34;30154:1;30146:6;30142:14;30135:58;30227:7;30222:2;30214:6;30210:15;30203:32;30018:224;:::o;30248:366::-;30390:3;30411:67;30475:2;30470:3;30411:67;:::i;:::-;30404:74;;30487:93;30576:3;30487:93;:::i;:::-;30605:2;30600:3;30596:12;30589:19;;30248:366;;;:::o;30620:419::-;30786:4;30824:2;30813:9;30809:18;30801:26;;30873:9;30867:4;30863:20;30859:1;30848:9;30844:17;30837:47;30901:131;31027:4;30901:131;:::i;:::-;30893:139;;30620:419;;;:::o;31045:222::-;31185:34;31181:1;31173:6;31169:14;31162:58;31254:5;31249:2;31241:6;31237:15;31230:30;31045:222;:::o;31273:366::-;31415:3;31436:67;31500:2;31495:3;31436:67;:::i;:::-;31429:74;;31512:93;31601:3;31512:93;:::i;:::-;31630:2;31625:3;31621:12;31614:19;;31273:366;;;:::o;31645:419::-;31811:4;31849:2;31838:9;31834:18;31826:26;;31898:9;31892:4;31888:20;31884:1;31873:9;31869:17;31862:47;31926:131;32052:4;31926:131;:::i;:::-;31918:139;;31645:419;;;:::o;32070:168::-;32210:20;32206:1;32198:6;32194:14;32187:44;32070:168;:::o;32244:366::-;32386:3;32407:67;32471:2;32466:3;32407:67;:::i;:::-;32400:74;;32483:93;32572:3;32483:93;:::i;:::-;32601:2;32596:3;32592:12;32585:19;;32244:366;;;:::o;32616:419::-;32782:4;32820:2;32809:9;32805:18;32797:26;;32869:9;32863:4;32859:20;32855:1;32844:9;32840:17;32833:47;32897:131;33023:4;32897:131;:::i;:::-;32889:139;;32616:419;;;:::o;33041:170::-;33181:22;33177:1;33169:6;33165:14;33158:46;33041:170;:::o;33217:366::-;33359:3;33380:67;33444:2;33439:3;33380:67;:::i;:::-;33373:74;;33456:93;33545:3;33456:93;:::i;:::-;33574:2;33569:3;33565:12;33558:19;;33217:366;;;:::o;33589:419::-;33755:4;33793:2;33782:9;33778:18;33770:26;;33842:9;33836:4;33832:20;33828:1;33817:9;33813:17;33806:47;33870:131;33996:4;33870:131;:::i;:::-;33862:139;;33589:419;;;:::o;34014:228::-;34154:34;34150:1;34142:6;34138:14;34131:58;34223:11;34218:2;34210:6;34206:15;34199:36;34014:228;:::o;34248:366::-;34390:3;34411:67;34475:2;34470:3;34411:67;:::i;:::-;34404:74;;34487:93;34576:3;34487:93;:::i;:::-;34605:2;34600:3;34596:12;34589:19;;34248:366;;;:::o;34620:419::-;34786:4;34824:2;34813:9;34809:18;34801:26;;34873:9;34867:4;34863:20;34859:1;34848:9;34844:17;34837:47;34901:131;35027:4;34901:131;:::i;:::-;34893:139;;34620:419;;;:::o;35045:172::-;35185:24;35181:1;35173:6;35169:14;35162:48;35045:172;:::o;35223:366::-;35365:3;35386:67;35450:2;35445:3;35386:67;:::i;:::-;35379:74;;35462:93;35551:3;35462:93;:::i;:::-;35580:2;35575:3;35571:12;35564:19;;35223:366;;;:::o;35595:419::-;35761:4;35799:2;35788:9;35784:18;35776:26;;35848:9;35842:4;35838:20;35834:1;35823:9;35819:17;35812:47;35876:131;36002:4;35876:131;:::i;:::-;35868:139;;35595:419;;;:::o;36020:240::-;36160:34;36156:1;36148:6;36144:14;36137:58;36229:23;36224:2;36216:6;36212:15;36205:48;36020:240;:::o;36266:366::-;36408:3;36429:67;36493:2;36488:3;36429:67;:::i;:::-;36422:74;;36505:93;36594:3;36505:93;:::i;:::-;36623:2;36618:3;36614:12;36607:19;;36266:366;;;:::o;36638:419::-;36804:4;36842:2;36831:9;36827:18;36819:26;;36891:9;36885:4;36881:20;36877:1;36866:9;36862:17;36855:47;36919:131;37045:4;36919:131;:::i;:::-;36911:139;;36638:419;;;:::o;37063:169::-;37203:21;37199:1;37191:6;37187:14;37180:45;37063:169;:::o;37238:366::-;37380:3;37401:67;37465:2;37460:3;37401:67;:::i;:::-;37394:74;;37477:93;37566:3;37477:93;:::i;:::-;37595:2;37590:3;37586:12;37579:19;;37238:366;;;:::o;37610:419::-;37776:4;37814:2;37803:9;37799:18;37791:26;;37863:9;37857:4;37853:20;37849:1;37838:9;37834:17;37827:47;37891:131;38017:4;37891:131;:::i;:::-;37883:139;;37610:419;;;:::o;38035:241::-;38175:34;38171:1;38163:6;38159:14;38152:58;38244:24;38239:2;38231:6;38227:15;38220:49;38035:241;:::o;38282:366::-;38424:3;38445:67;38509:2;38504:3;38445:67;:::i;:::-;38438:74;;38521:93;38610:3;38521:93;:::i;:::-;38639:2;38634:3;38630:12;38623:19;;38282:366;;;:::o;38654:419::-;38820:4;38858:2;38847:9;38843:18;38835:26;;38907:9;38901:4;38897:20;38893:1;38882:9;38878:17;38871:47;38935:131;39061:4;38935:131;:::i;:::-;38927:139;;38654:419;;;:::o;39079:194::-;39119:4;39139:20;39157:1;39139:20;:::i;:::-;39134:25;;39173:20;39191:1;39173:20;:::i;:::-;39168:25;;39217:1;39214;39210:9;39202:17;;39241:1;39235:4;39232:11;39229:37;;;39246:18;;:::i;:::-;39229:37;39079:194;;;;:::o;39279:220::-;39419:34;39415:1;39407:6;39403:14;39396:58;39488:3;39483:2;39475:6;39471:15;39464:28;39279:220;:::o;39505:366::-;39647:3;39668:67;39732:2;39727:3;39668:67;:::i;:::-;39661:74;;39744:93;39833:3;39744:93;:::i;:::-;39862:2;39857:3;39853:12;39846:19;;39505:366;;;:::o;39877:419::-;40043:4;40081:2;40070:9;40066:18;40058:26;;40130:9;40124:4;40120:20;40116:1;40105:9;40101:17;40094:47;40158:131;40284:4;40158:131;:::i;:::-;40150:139;;39877:419;;;:::o;40302:221::-;40442:34;40438:1;40430:6;40426:14;40419:58;40511:4;40506:2;40498:6;40494:15;40487:29;40302:221;:::o;40529:366::-;40671:3;40692:67;40756:2;40751:3;40692:67;:::i;:::-;40685:74;;40768:93;40857:3;40768:93;:::i;:::-;40886:2;40881:3;40877:12;40870:19;;40529:366;;;:::o;40901:419::-;41067:4;41105:2;41094:9;41090:18;41082:26;;41154:9;41148:4;41144:20;41140:1;41129:9;41125:17;41118:47;41182:131;41308:4;41182:131;:::i;:::-;41174:139;;40901:419;;;:::o;41326:225::-;41466:34;41462:1;41454:6;41450:14;41443:58;41535:8;41530:2;41522:6;41518:15;41511:33;41326:225;:::o;41557:366::-;41699:3;41720:67;41784:2;41779:3;41720:67;:::i;:::-;41713:74;;41796:93;41885:3;41796:93;:::i;:::-;41914:2;41909:3;41905:12;41898:19;;41557:366;;;:::o;41929:419::-;42095:4;42133:2;42122:9;42118:18;42110:26;;42182:9;42176:4;42172:20;42168:1;42157:9;42153:17;42146:47;42210:131;42336:4;42210:131;:::i;:::-;42202:139;;41929:419;;;:::o;42354:442::-;42503:4;42541:2;42530:9;42526:18;42518:26;;42554:71;42622:1;42611:9;42607:17;42598:6;42554:71;:::i;:::-;42635:72;42703:2;42692:9;42688:18;42679:6;42635:72;:::i;:::-;42717;42785:2;42774:9;42770:18;42761:6;42717:72;:::i;:::-;42354:442;;;;;;:::o;42802:180::-;42850:77;42847:1;42840:88;42947:4;42944:1;42937:15;42971:4;42968:1;42961:15;42988:180;43036:77;43033:1;43026:88;43133:4;43130:1;43123:15;43157:4;43154:1;43147:15;43174:143;43231:5;43262:6;43256:13;43247:22;;43278:33;43305:5;43278:33;:::i;:::-;43174:143;;;;:::o;43323:351::-;43393:6;43442:2;43430:9;43421:7;43417:23;43413:32;43410:119;;;43448:79;;:::i;:::-;43410:119;43568:1;43593:64;43649:7;43640:6;43629:9;43625:22;43593:64;:::i;:::-;43583:74;;43539:128;43323:351;;;;:::o;43680:85::-;43725:7;43754:5;43743:16;;43680:85;;;:::o;43771:158::-;43829:9;43862:61;43880:42;43889:32;43915:5;43889:32;:::i;:::-;43880:42;:::i;:::-;43862:61;:::i;:::-;43849:74;;43771:158;;;:::o;43935:147::-;44030:45;44069:5;44030:45;:::i;:::-;44025:3;44018:58;43935:147;;:::o;44088:114::-;44155:6;44189:5;44183:12;44173:22;;44088:114;;;:::o;44208:184::-;44307:11;44341:6;44336:3;44329:19;44381:4;44376:3;44372:14;44357:29;;44208:184;;;;:::o;44398:132::-;44465:4;44488:3;44480:11;;44518:4;44513:3;44509:14;44501:22;;44398:132;;;:::o;44536:108::-;44613:24;44631:5;44613:24;:::i;:::-;44608:3;44601:37;44536:108;;:::o;44650:179::-;44719:10;44740:46;44782:3;44774:6;44740:46;:::i;:::-;44818:4;44813:3;44809:14;44795:28;;44650:179;;;;:::o;44835:113::-;44905:4;44937;44932:3;44928:14;44920:22;;44835:113;;;:::o;44984:732::-;45103:3;45132:54;45180:5;45132:54;:::i;:::-;45202:86;45281:6;45276:3;45202:86;:::i;:::-;45195:93;;45312:56;45362:5;45312:56;:::i;:::-;45391:7;45422:1;45407:284;45432:6;45429:1;45426:13;45407:284;;;45508:6;45502:13;45535:63;45594:3;45579:13;45535:63;:::i;:::-;45528:70;;45621:60;45674:6;45621:60;:::i;:::-;45611:70;;45467:224;45454:1;45451;45447:9;45442:14;;45407:284;;;45411:14;45707:3;45700:10;;45108:608;;;44984:732;;;;:::o;45722:831::-;45985:4;46023:3;46012:9;46008:19;46000:27;;46037:71;46105:1;46094:9;46090:17;46081:6;46037:71;:::i;:::-;46118:80;46194:2;46183:9;46179:18;46170:6;46118:80;:::i;:::-;46245:9;46239:4;46235:20;46230:2;46219:9;46215:18;46208:48;46273:108;46376:4;46367:6;46273:108;:::i;:::-;46265:116;;46391:72;46459:2;46448:9;46444:18;46435:6;46391:72;:::i;:::-;46473:73;46541:3;46530:9;46526:19;46517:6;46473:73;:::i;:::-;45722:831;;;;;;;;:::o;46559:807::-;46808:4;46846:3;46835:9;46831:19;46823:27;;46860:71;46928:1;46917:9;46913:17;46904:6;46860:71;:::i;:::-;46941:72;47009:2;46998:9;46994:18;46985:6;46941:72;:::i;:::-;47023:80;47099:2;47088:9;47084:18;47075:6;47023:80;:::i;:::-;47113;47189:2;47178:9;47174:18;47165:6;47113:80;:::i;:::-;47203:73;47271:3;47260:9;47256:19;47247:6;47203:73;:::i;:::-;47286;47354:3;47343:9;47339:19;47330:6;47286:73;:::i;:::-;46559:807;;;;;;;;;:::o;47372:143::-;47429:5;47460:6;47454:13;47445:22;;47476:33;47503:5;47476:33;:::i;:::-;47372:143;;;;:::o;47521:663::-;47609:6;47617;47625;47674:2;47662:9;47653:7;47649:23;47645:32;47642:119;;;47680:79;;:::i;:::-;47642:119;47800:1;47825:64;47881:7;47872:6;47861:9;47857:22;47825:64;:::i;:::-;47815:74;;47771:128;47938:2;47964:64;48020:7;48011:6;48000:9;47996:22;47964:64;:::i;:::-;47954:74;;47909:129;48077:2;48103:64;48159:7;48150:6;48139:9;48135:22;48103:64;:::i;:::-;48093:74;;48048:129;47521:663;;;;;:::o

Swarm Source

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