ETH Price: $2,563.04 (-17.57%)
 

Overview

Max Total Supply

100,000,000 BDD

Holders

34

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
0.000000000062017506 BDD

Value
$0.00
0xe184091536b8c8bf432c3dba044a22f876c3dacd
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:
BetDaddy

Compiler Version
v0.8.20+commit.a1b79de6

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-10-05
*/

/**
    BetDaddy

    Website: betdaddy.app
    Twitter: x.com/BetDaddy_app
    Telegram Bot: t.me/BetDaddy_Bot

**/

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

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

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

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

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

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

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

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

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

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

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

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

/* pragma solidity ^0.8.0; */

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

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

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

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

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

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

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

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

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

/* pragma solidity ^0.8.0; */

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

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

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

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

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

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

  uint256 private _totalSupply;

  string private _name;
  string private _symbol;

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

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

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

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

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

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

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

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

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

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

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

    return true;
  }

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

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

    return true;
  }

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

    _beforeTokenTransfer(sender, recipient, amount);

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

    emit Transfer(sender, recipient, amount);

    _afterTokenTransfer(sender, recipient, amount);
  }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  function feeTo() external view returns (address);

  function feeToSetter() external view returns (address);

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

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

  function allPairsLength() external view returns (uint256);

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

  function setFeeTo(address) external;

  function setFeeToSetter(address) external;
}

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

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

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

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

  function decimals() external pure returns (uint8);

  function totalSupply() external view returns (uint256);

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

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

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

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

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

  function DOMAIN_SEPARATOR() external view returns (bytes32);

  function PERMIT_TYPEHASH() external pure returns (bytes32);

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

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

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

  function MINIMUM_LIQUIDITY() external pure returns (uint256);

  function factory() external view returns (address);

  function token0() external view returns (address);

  function token1() external view returns (address);

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

  function price0CumulativeLast() external view returns (uint256);

  function price1CumulativeLast() external view returns (uint256);

  function kLast() external view returns (uint256);

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

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

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

  function skim(address to) external;

  function sync() external;

  function initialize(address, address) external;
}

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

  function WETH() external pure returns (address);

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

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

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

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

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

contract BetDaddy 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 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("BetDaddy", "BDD") {
    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 = 0;
    uint256 _buyLiquidityFee = 1;
    uint256 _buyTeamFee = 9;

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

    uint256 totalSupply = 100_000_000 * 1e18;

    maxTransactionAmount = 1_000_000 * 1e18; // 1%
    maxWallet = 1_000_000 * 1e18; // 1%
    swapTokensAtAmount = (totalSupply * 5) / 1_000_000; // 0.05%

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

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

    revShareWallet = address(0x9feb4eC13b39D32528c76e5e767cC913dbf77C47); // set as revShare wallet
    teamWallet = owner(); // set as team wallet

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

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

    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) / 100_000,
      "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;
  }

  function updateSellFees(
    uint256 _revShareFee,
    uint256 _liquidityFee,
    uint256 _teamFee
  ) external onlyOwner {
    sellRevShareFee = _revShareFee;
    sellLiquidityFee = _liquidityFee;
    sellTeamFee = _teamFee;
    sellTotalFees = sellRevShareFee + sellLiquidityFee + sellTeamFee;
  }

  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;

    if (ethForTeam > 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 withdrawStuckBD() external onlyOwner {
    uint256 balance = IERC20(address(this)).balanceOf(address(this));
    IERC20(address(this)).transfer(msg.sender, balance);
    payable(msg.sender).transfer(address(this).balance);
  }

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

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

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

  // @dev blacklist v3 pools; can unblacklist() down the road to suit project and community
  function blacklist(address lpAddress) public onlyOwner {
    require(!blacklistRenounced, "Team has revoked blacklist rights");
    require(
      lpAddress != address(uniswapV2Pair) && lpAddress != address(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D),
      "Cannot blacklist token's v2 router or v2 pool."
    );
    blacklisted[lpAddress] = 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);
  }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiquidity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newAddress","type":"address"},{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"}],"name":"UpdateUniswapV2Router","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"revShareWalletUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"newWallet","type":"address"},{"indexed":true,"internalType":"address","name":"oldWallet","type":"address"}],"name":"teamWalletUpdated","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"lpAddress","type":"address"}],"name":"blacklist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"blacklistRenounced","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyLiquidityFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyRevShareFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTeamFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyTotalFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deadAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"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":"withdrawStuckBD","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"toAddr","type":"address"}],"name":"withdrawStuckEth","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"address","name":"_to","type":"address"}],"name":"withdrawStuckToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c06040526001600b5f6101000a81548160ff0219169083151502179055505f600b60016101000a81548160ff0219169083151502179055505f600b60026101000a81548160ff0219169083151502179055505f600b60036101000a81548160ff0219169083151502179055506001601b5f6101000a81548160ff02191690831515021790555034801562000092575f80fd5b506040518060400160405280600881526020017f42657444616464790000000000000000000000000000000000000000000000008152506040518060400160405280600381526020017f4244440000000000000000000000000000000000000000000000000000000000815250816003908162000110919062000d8a565b50806004908162000122919062000d8a565b5050506200014562000139620005fe60201b60201c565b6200060560201b60201c565b5f737a250d5630b4cf539739df2c5dacb4c659f2488d905062000170816001620006c860201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001ee573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062000214919062000ed3565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200027a573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620002a0919062000ed3565b6040518363ffffffff1660e01b8152600401620002bf92919062000f14565b6020604051808303815f875af1158015620002dc573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062000302919062000ed3565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff16815250506200034a60a0516001620006c860201b60201c565b6200035f60a0516001620007af60201b60201c565b5f80600190505f600990505f80600190505f601390505f6a52b7d2dcc80cd2e4000000905069d3c21bcecceda100000060088190555069d3c21bcecceda1000000600a81905550620f4240600582620003b9919062000f6c565b620003c5919062000fe3565b60098190555086600e8190555085600f8190555084601081905550601054600f54600e54620003f591906200101a565b6200040191906200101a565b600d819055508360128190555082601381905550816014819055506014546013546012546200043191906200101a565b6200043d91906200101a565b601181905550739feb4ec13b39d32528c76e5e767cc913dbf77c4760065f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620004a76200084d60201b60201c565b60075f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555062000508620004fa6200084d60201b60201c565b60016200087560201b60201c565b6200051b3060016200087560201b60201c565b6200053061dead60016200087560201b60201c565b62000552620005446200084d60201b60201c565b6001620006c860201b60201c565b62000565306001620006c860201b60201c565b6200057a61dead6001620006c860201b60201c565b6001601c5f6200058f6200084d60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550620005f03382620009ac60201b60201c565b5050505050505050620011a3565b5f33905090565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b620006d8620005fe60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620006fe6200084d60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000757576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200074e90620010b2565b60405180910390fd5b8060195f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b80601a5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b62000885620005fe60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620008ab6200084d60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000904576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620008fb90620010b2565b60405180910390fd5b8060185f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df782604051620009a09190620010ee565b60405180910390a25050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362000a1d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000a149062001157565b60405180910390fd5b62000a305f838362000b1c60201b60201c565b8060025f82825462000a4391906200101a565b92505081905550805f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825462000a9791906200101a565b925050819055508173ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000afd919062001188565b60405180910390a362000b185f838362000b2160201b60201c565b5050565b505050565b505050565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168062000ba257607f821691505b60208210810362000bb85762000bb762000b5d565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f6008830262000c1c7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000bdf565b62000c28868362000bdf565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f62000c7262000c6c62000c668462000c40565b62000c49565b62000c40565b9050919050565b5f819050919050565b62000c8d8362000c52565b62000ca562000c9c8262000c79565b84845462000beb565b825550505050565b5f90565b62000cbb62000cad565b62000cc881848462000c82565b505050565b5b8181101562000cef5762000ce35f8262000cb1565b60018101905062000cce565b5050565b601f82111562000d3e5762000d088162000bbe565b62000d138462000bd0565b8101602085101562000d23578190505b62000d3b62000d328562000bd0565b83018262000ccd565b50505b505050565b5f82821c905092915050565b5f62000d605f198460080262000d43565b1980831691505092915050565b5f62000d7a838362000d4f565b9150826002028217905092915050565b62000d958262000b26565b67ffffffffffffffff81111562000db15762000db062000b30565b5b62000dbd825462000b8a565b62000dca82828562000cf3565b5f60209050601f83116001811462000e00575f841562000deb578287015190505b62000df7858262000d6d565b86555062000e66565b601f19841662000e108662000bbe565b5f5b8281101562000e395784890151825560018201915060208501945060208101905062000e12565b8683101562000e59578489015162000e55601f89168262000d4f565b8355505b6001600288020188555050505b505050505050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f62000e9d8262000e72565b9050919050565b62000eaf8162000e91565b811462000eba575f80fd5b50565b5f8151905062000ecd8162000ea4565b92915050565b5f6020828403121562000eeb5762000eea62000e6e565b5b5f62000efa8482850162000ebd565b91505092915050565b62000f0e8162000e91565b82525050565b5f60408201905062000f295f83018562000f03565b62000f38602083018462000f03565b9392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f62000f788262000c40565b915062000f858362000c40565b925082820262000f958162000c40565b9150828204841483151762000faf5762000fae62000f3f565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f62000fef8262000c40565b915062000ffc8362000c40565b9250826200100f576200100e62000fb6565b5b828204905092915050565b5f620010268262000c40565b9150620010338362000c40565b92508282019050808211156200104e576200104d62000f3f565b5b92915050565b5f82825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f6200109a60208362001054565b9150620010a78262001064565b602082019050919050565b5f6020820190508181035f830152620010cb816200108c565b9050919050565b5f8115159050919050565b620010e881620010d2565b82525050565b5f602082019050620011035f830184620010dd565b92915050565b7f45524332303a206d696e7420746f20746865207a65726f2061646472657373005f82015250565b5f6200113f601f8362001054565b91506200114c8262001109565b602082019050919050565b5f6020820190508181035f830152620011708162001131565b9050919050565b620011828162000c40565b82525050565b5f6020820190506200119d5f83018462001177565b92915050565b60805160a051615b09620011f65f395f818161128201528181611e6b0152612af401525f8181610f7a0152818161424f0152818161432e01528181614355015281816143eb01526144120152615b095ff3fe6080604052600436106103bb575f3560e01c80637cb332bb116101f1578063c02466681161010c578063e2f456051161009f578063f8b45b051161006e578063f8b45b0514610dde578063f9f92be414610e08578063fde83a3414610e30578063fe575a8714610e5a576103c2565b8063e2f4560514610d38578063f11a24d314610d62578063f2fde38b14610d8c578063f637434214610db4576103c2565b8063d257b34f116100db578063d257b34f14610c6c578063d729715f14610ca8578063d85ba06314610cd2578063dd62ed3e14610cfc576103c2565b8063c024666814610bca578063c17b5b8c14610bf2578063c18bc19514610c1a578063c8c8ebe414610c42576103c2565b80639c2e4ac611610184578063adee28ff11610153578063adee28ff14610b14578063b62496f514610b3c578063bbc0c74214610b78578063bc205ad314610ba2576103c2565b80639c2e4ac614610a4a578063a457c2d714610a74578063a9059cbb14610ab0578063aa0e438814610aec576103c2565b80638ddb4ee5116101c05780638ddb4ee5146109ba578063924de9b7146109d057806395d89b41146109f85780639a7a23d614610a22576103c2565b80637cb332bb1461092a5780638095d564146109525780638a8c523c1461097a5780638da5cb5b14610990576103c2565b80633dc599ff116102e15780636ddd1713116102745780637571336a116102435780637571336a1461088857806375e3661e146108b0578063782c4e99146108d85780637ca8448a14610902576103c2565b80636ddd1713146107e257806370a082311461080c578063715018a614610848578063751039fc1461085e576103c2565b80634fbee193116102b05780634fbee1931461073c57806359927044146107785780635f189361146107a25780636a486a8e146107b8576103c2565b80633dc599ff1461068257806349bd5a5e146106ac5780634a62bb65146106d65780634e29e52314610700576103c2565b806319eab0421161035957806324b9f3c11161032857806324b9f3c1146105c857806327c8f835146105f2578063313ce5671461061c5780633950935114610646576103c2565b806319eab042146105105780631a8145bb1461053a578063203e727e1461056457806323b872dd1461058c576103c2565b806310d5de531161039557806310d5de5314610456578063156c2f35146104925780631694505e146104bc57806318160ddd146104e6576103c2565b806306fdde03146103c6578063095ea7b3146103f05780630e922ca71461042c576103c2565b366103c257005b5f80fd5b3480156103d1575f80fd5b506103da610e96565b6040516103e7919061454d565b60405180910390f35b3480156103fb575f80fd5b50610416600480360381019061041191906145fe565b610f26565b6040516104239190614656565b60405180910390f35b348015610437575f80fd5b50610440610f43565b60405161044d9190614656565b60405180910390f35b348015610461575f80fd5b5061047c6004803603810190610477919061466f565b610f55565b6040516104899190614656565b60405180910390f35b34801561049d575f80fd5b506104a6610f72565b6040516104b391906146a9565b60405180910390f35b3480156104c7575f80fd5b506104d0610f78565b6040516104dd919061471d565b60405180910390f35b3480156104f1575f80fd5b506104fa610f9c565b60405161050791906146a9565b60405180910390f35b34801561051b575f80fd5b50610524610fa5565b60405161053191906146a9565b60405180910390f35b348015610545575f80fd5b5061054e610fab565b60405161055b91906146a9565b60405180910390f35b34801561056f575f80fd5b5061058a60048036038101906105859190614736565b610fb1565b005b348015610597575f80fd5b506105b260048036038101906105ad9190614761565b6110c0565b6040516105bf9190614656565b60405180910390f35b3480156105d3575f80fd5b506105dc6111b2565b6040516105e991906146a9565b60405180910390f35b3480156105fd575f80fd5b506106066111b8565b60405161061391906147c0565b60405180910390f35b348015610627575f80fd5b506106306111be565b60405161063d91906147f4565b60405180910390f35b348015610651575f80fd5b5061066c600480360381019061066791906145fe565b6111c6565b6040516106799190614656565b60405180910390f35b34801561068d575f80fd5b5061069661126d565b6040516106a39190614656565b60405180910390f35b3480156106b7575f80fd5b506106c0611280565b6040516106cd91906147c0565b60405180910390f35b3480156106e1575f80fd5b506106ea6112a4565b6040516106f79190614656565b60405180910390f35b34801561070b575f80fd5b506107266004803603810190610721919061466f565b6112b6565b6040516107339190614656565b60405180910390f35b348015610747575f80fd5b50610762600480360381019061075d919061466f565b6112d3565b60405161076f9190614656565b60405180910390f35b348015610783575f80fd5b5061078c611325565b60405161079991906147c0565b60405180910390f35b3480156107ad575f80fd5b506107b661134a565b005b3480156107c3575f80fd5b506107cc6113e3565b6040516107d991906146a9565b60405180910390f35b3480156107ed575f80fd5b506107f66113e9565b6040516108039190614656565b60405180910390f35b348015610817575f80fd5b50610832600480360381019061082d919061466f565b6113fc565b60405161083f91906146a9565b60405180910390f35b348015610853575f80fd5b5061085c611441565b005b348015610869575f80fd5b506108726114c8565b60405161087f9190614656565b60405180910390f35b348015610893575f80fd5b506108ae60048036038101906108a99190614837565b611565565b005b3480156108bb575f80fd5b506108d660048036038101906108d1919061466f565b611639565b005b3480156108e3575f80fd5b506108ec61170c565b6040516108f991906147c0565b60405180910390f35b34801561090d575f80fd5b506109286004803603810190610923919061466f565b611731565b005b348015610935575f80fd5b50610950600480360381019061094b919061466f565b611822565b005b34801561095d575f80fd5b5061097860048036038101906109739190614875565b61195c565b005b348015610985575f80fd5b5061098e611a15565b005b34801561099b575f80fd5b506109a4611ae2565b6040516109b191906147c0565b60405180910390f35b3480156109c5575f80fd5b506109ce611b0a565b005b3480156109db575f80fd5b506109f660048036038101906109f191906148c5565b611cc4565b005b348015610a03575f80fd5b50610a0c611d5d565b604051610a19919061454d565b60405180910390f35b348015610a2d575f80fd5b50610a486004803603810190610a439190614837565b611ded565b005b348015610a55575f80fd5b50610a5e611f05565b604051610a6b91906146a9565b60405180910390f35b348015610a7f575f80fd5b50610a9a6004803603810190610a9591906145fe565b611f0b565b604051610aa79190614656565b60405180910390f35b348015610abb575f80fd5b50610ad66004803603810190610ad191906145fe565b611ff1565b604051610ae39190614656565b60405180910390f35b348015610af7575f80fd5b50610b126004803603810190610b0d9190614837565b61200e565b005b348015610b1f575f80fd5b50610b3a6004803603810190610b35919061466f565b6120f6565b005b348015610b47575f80fd5b50610b626004803603810190610b5d919061466f565b612230565b604051610b6f9190614656565b60405180910390f35b348015610b83575f80fd5b50610b8c61224d565b604051610b999190614656565b60405180910390f35b348015610bad575f80fd5b50610bc86004803603810190610bc391906148f0565b612260565b005b348015610bd5575f80fd5b50610bf06004803603810190610beb9190614837565b612446565b005b348015610bfd575f80fd5b50610c186004803603810190610c139190614875565b612568565b005b348015610c25575f80fd5b50610c406004803603810190610c3b9190614736565b612621565b005b348015610c4d575f80fd5b50610c56612730565b604051610c6391906146a9565b60405180910390f35b348015610c77575f80fd5b50610c926004803603810190610c8d9190614736565b612736565b604051610c9f9190614656565b60405180910390f35b348015610cb3575f80fd5b50610cbc61288a565b604051610cc991906146a9565b60405180910390f35b348015610cdd575f80fd5b50610ce6612890565b604051610cf391906146a9565b60405180910390f35b348015610d07575f80fd5b50610d226004803603810190610d1d91906148f0565b612896565b604051610d2f91906146a9565b60405180910390f35b348015610d43575f80fd5b50610d4c612918565b604051610d5991906146a9565b60405180910390f35b348015610d6d575f80fd5b50610d7661291e565b604051610d8391906146a9565b60405180910390f35b348015610d97575f80fd5b50610db26004803603810190610dad919061466f565b612924565b005b348015610dbf575f80fd5b50610dc8612a1a565b604051610dd591906146a9565b60405180910390f35b348015610de9575f80fd5b50610df2612a20565b604051610dff91906146a9565b60405180910390f35b348015610e13575f80fd5b50610e2e6004803603810190610e29919061466f565b612a26565b005b348015610e3b575f80fd5b50610e44612c25565b604051610e5191906146a9565b60405180910390f35b348015610e65575f80fd5b50610e806004803603810190610e7b919061466f565b612c2b565b604051610e8d9190614656565b60405180910390f35b606060038054610ea59061495b565b80601f0160208091040260200160405190810160405280929190818152602001828054610ed19061495b565b8015610f1c5780601f10610ef357610100808354040283529160200191610f1c565b820191905f5260205f20905b815481529060010190602001808311610eff57829003601f168201915b5050505050905090565b5f610f39610f32612c7d565b8484612c84565b6001905092915050565b601b5f9054906101000a900460ff1681565b6019602052805f5260405f205f915054906101000a900460ff1681565b600e5481565b7f000000000000000000000000000000000000000000000000000000000000000081565b5f600254905090565b60125481565b60165481565b610fb9612c7d565b73ffffffffffffffffffffffffffffffffffffffff16610fd7611ae2565b73ffffffffffffffffffffffffffffffffffffffff161461102d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611024906149d5565b60405180910390fd5b670de0b6b3a76400006103e86005611043610f9c565b61104d9190614a20565b6110579190614a8e565b6110619190614a8e565b8110156110a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161109a90614b2e565b60405180910390fd5b670de0b6b3a7640000816110b79190614a20565b60088190555050565b5f6110cc848484612e47565b5f60015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f611113612c7d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905082811015611192576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161118990614bbc565b60405180910390fd5b6111a68561119e612c7d565b858403612c84565b60019150509392505050565b60155481565b61dead81565b5f6012905090565b5f6112636111d2612c7d565b848460015f6111df612c7d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205461125e9190614bda565b612c84565b6001905092915050565b600b60039054906101000a900460ff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b600b5f9054906101000a900460ff1681565b601c602052805f5260405f205f915054906101000a900460ff1681565b5f60185f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169050919050565b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611352612c7d565b73ffffffffffffffffffffffffffffffffffffffff16611370611ae2565b73ffffffffffffffffffffffffffffffffffffffff16146113c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113bd906149d5565b60405180910390fd5b6001600b60036101000a81548160ff021916908315150217905550565b60115481565b600b60029054906101000a900460ff1681565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b611449612c7d565b73ffffffffffffffffffffffffffffffffffffffff16611467611ae2565b73ffffffffffffffffffffffffffffffffffffffff16146114bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114b4906149d5565b60405180910390fd5b6114c65f613a89565b565b5f6114d1612c7d565b73ffffffffffffffffffffffffffffffffffffffff166114ef611ae2565b73ffffffffffffffffffffffffffffffffffffffff1614611545576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161153c906149d5565b60405180910390fd5b5f600b5f6101000a81548160ff0219169083151502179055506001905090565b61156d612c7d565b73ffffffffffffffffffffffffffffffffffffffff1661158b611ae2565b73ffffffffffffffffffffffffffffffffffffffff16146115e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115d8906149d5565b60405180910390fd5b8060195f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b611641612c7d565b73ffffffffffffffffffffffffffffffffffffffff1661165f611ae2565b73ffffffffffffffffffffffffffffffffffffffff16146116b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116ac906149d5565b60405180910390fd5b5f600c5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff02191690831515021790555050565b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611739612c7d565b73ffffffffffffffffffffffffffffffffffffffff16611757611ae2565b73ffffffffffffffffffffffffffffffffffffffff16146117ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117a4906149d5565b60405180910390fd5b5f8173ffffffffffffffffffffffffffffffffffffffff16476040516117d290614c3a565b5f6040518083038185875af1925050503d805f811461180c576040519150601f19603f3d011682016040523d82523d5f602084013e611811565b606091505b505090508061181e575f80fd5b5050565b61182a612c7d565b73ffffffffffffffffffffffffffffffffffffffff16611848611ae2565b73ffffffffffffffffffffffffffffffffffffffff161461189e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611895906149d5565b60405180910390fd5b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8aa0f85050aca99be43beb823e0457e77966b3baf697a289b03681978f96166860405160405180910390a38060075f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b611964612c7d565b73ffffffffffffffffffffffffffffffffffffffff16611982611ae2565b73ffffffffffffffffffffffffffffffffffffffff16146119d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119cf906149d5565b60405180910390fd5b82600e8190555081600f8190555080601081905550601054600f54600e54611a009190614bda565b611a0a9190614bda565b600d81905550505050565b611a1d612c7d565b73ffffffffffffffffffffffffffffffffffffffff16611a3b611ae2565b73ffffffffffffffffffffffffffffffffffffffff1614611a91576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a88906149d5565b60405180910390fd5b6001600b60016101000a81548160ff0219169083151502179055506001600b60026101000a81548160ff0219169083151502179055505f601b5f6101000a81548160ff021916908315150217905550565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611b12612c7d565b73ffffffffffffffffffffffffffffffffffffffff16611b30611ae2565b73ffffffffffffffffffffffffffffffffffffffff1614611b86576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b7d906149d5565b60405180910390fd5b5f3073ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401611bc091906147c0565b602060405180830381865afa158015611bdb573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611bff9190614c62565b90503073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b8152600401611c3c929190614c8d565b6020604051808303815f875af1158015611c58573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611c7c9190614cc8565b503373ffffffffffffffffffffffffffffffffffffffff166108fc4790811502906040515f60405180830381858888f19350505050158015611cc0573d5f803e3d5ffd5b5050565b611ccc612c7d565b73ffffffffffffffffffffffffffffffffffffffff16611cea611ae2565b73ffffffffffffffffffffffffffffffffffffffff1614611d40576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d37906149d5565b60405180910390fd5b80600b60026101000a81548160ff02191690831515021790555050565b606060048054611d6c9061495b565b80601f0160208091040260200160405190810160405280929190818152602001828054611d989061495b565b8015611de35780601f10611dba57610100808354040283529160200191611de3565b820191905f5260205f20905b815481529060010190602001808311611dc657829003601f168201915b5050505050905090565b611df5612c7d565b73ffffffffffffffffffffffffffffffffffffffff16611e13611ae2565b73ffffffffffffffffffffffffffffffffffffffff1614611e69576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e60906149d5565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611ef7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eee90614d63565b60405180910390fd5b611f018282613b4c565b5050565b60105481565b5f8060015f611f18612c7d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905082811015611fd2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fc990614df1565b60405180910390fd5b611fe6611fdd612c7d565b85858403612c84565b600191505092915050565b5f612004611ffd612c7d565b8484612e47565b6001905092915050565b612016612c7d565b73ffffffffffffffffffffffffffffffffffffffff16612034611ae2565b73ffffffffffffffffffffffffffffffffffffffff161461208a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612081906149d5565b60405180910390fd5b80601c5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055506120e88282612446565b6120f28282611565565b5050565b6120fe612c7d565b73ffffffffffffffffffffffffffffffffffffffff1661211c611ae2565b73ffffffffffffffffffffffffffffffffffffffff1614612172576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612169906149d5565b60405180910390fd5b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fc9f2d63eee8632b33d7a7db5252eb29036e81ee4fbe29260febe0c49ffb8a7bb60405160405180910390a38060065f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601a602052805f5260405f205f915054906101000a900460ff1681565b600b60019054906101000a900460ff1681565b612268612c7d565b73ffffffffffffffffffffffffffffffffffffffff16612286611ae2565b73ffffffffffffffffffffffffffffffffffffffff16146122dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122d3906149d5565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361234a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161234190614e59565b60405180910390fd5b5f8273ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161238491906147c0565b602060405180830381865afa15801561239f573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906123c39190614c62565b90508273ffffffffffffffffffffffffffffffffffffffff1663a9059cbb83836040518363ffffffff1660e01b8152600401612400929190614c8d565b6020604051808303815f875af115801561241c573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906124409190614cc8565b50505050565b61244e612c7d565b73ffffffffffffffffffffffffffffffffffffffff1661246c611ae2565b73ffffffffffffffffffffffffffffffffffffffff16146124c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124b9906149d5565b60405180910390fd5b8060185f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df78260405161255c9190614656565b60405180910390a25050565b612570612c7d565b73ffffffffffffffffffffffffffffffffffffffff1661258e611ae2565b73ffffffffffffffffffffffffffffffffffffffff16146125e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125db906149d5565b60405180910390fd5b82601281905550816013819055508060148190555060145460135460125461260c9190614bda565b6126169190614bda565b601181905550505050565b612629612c7d565b73ffffffffffffffffffffffffffffffffffffffff16612647611ae2565b73ffffffffffffffffffffffffffffffffffffffff161461269d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612694906149d5565b60405180910390fd5b670de0b6b3a76400006103e8600a6126b3610f9c565b6126bd9190614a20565b6126c79190614a8e565b6126d19190614a8e565b811015612713576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161270a90614ee7565b60405180910390fd5b670de0b6b3a7640000816127279190614a20565b600a8190555050565b60085481565b5f61273f612c7d565b73ffffffffffffffffffffffffffffffffffffffff1661275d611ae2565b73ffffffffffffffffffffffffffffffffffffffff16146127b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127aa906149d5565b60405180910390fd5b620186a060016127c1610f9c565b6127cb9190614a20565b6127d59190614a8e565b821015612817576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161280e90614f75565b60405180910390fd5b6103e86005612824610f9c565b61282e9190614a20565b6128389190614a8e565b82111561287a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161287190615003565b60405180910390fd5b8160098190555060019050919050565b60145481565b600d5481565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b60095481565b600f5481565b61292c612c7d565b73ffffffffffffffffffffffffffffffffffffffff1661294a611ae2565b73ffffffffffffffffffffffffffffffffffffffff16146129a0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612997906149d5565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612a0e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a0590615091565b60405180910390fd5b612a1781613a89565b50565b60135481565b600a5481565b612a2e612c7d565b73ffffffffffffffffffffffffffffffffffffffff16612a4c611ae2565b73ffffffffffffffffffffffffffffffffffffffff1614612aa2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a99906149d5565b60405180910390fd5b600b60039054906101000a900460ff1615612af2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ae99061511f565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614158015612b8e5750737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b612bcd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bc4906151ad565b60405180910390fd5b6001600c5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff02191690831515021790555050565b60175481565b5f600c5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169050919050565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612cf2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ce99061523b565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612d60576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d57906152c9565b60405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612e3a91906146a9565b60405180910390a3505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612eb5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612eac90615357565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612f23576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f1a906153e5565b60405180910390fd5b600c5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1615612fad576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fa49061544d565b60405180910390fd5b600c5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1615613037576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161302e906154b5565b60405180910390fd5b601b5f9054906101000a900460ff16156130d557601c5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff166130d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130cb90615543565b60405180910390fd5b5b5f81036130ec576130e783835f613bea565b613a84565b600b5f9054906101000a900460ff16156135d057613108611ae2565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156131765750613146611ae2565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156131ae57505f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156131e8575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156132015750600560149054906101000a900460ff16155b156135cf57600b60019054906101000a900460ff166132f55760185f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16806132b5575060185f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b6132f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132eb906155ab565b60405180910390fd5b5b601a5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015613392575060195f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15613439576008548111156133dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133d390615639565b60405180910390fd5b600a546133e8836113fc565b826133f39190614bda565b1115613434576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161342b906156a1565b60405180910390fd5b6135ce565b601a5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680156134d6575060195f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b1561352557600854811115613520576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016135179061572f565b60405180910390fd5b6135cd565b60195f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff166135cc57600a5461357f836113fc565b8261358a9190614bda565b11156135cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016135c2906156a1565b60405180910390fd5b5b5b5b5b5b5f6135da306113fc565b90505f60095482101590508080156135fe5750600b60029054906101000a900460ff165b80156136175750600560149054906101000a900460ff16155b801561366a5750601a5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b80156136bd575060185f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b8015613710575060185f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15613753576001600560146101000a81548160ff021916908315150217905550613738613e5f565b5f600560146101000a81548160ff0219169083151502179055505b5f600560149054906101000a900460ff1615905060185f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680613802575060185f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b1561380b575f90505b5f8115613a7457601a5f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16801561386957505f601154115b156139335761389660646138886011548861416990919063ffffffff16565b61417e90919063ffffffff16565b9050601154601354826138a99190614a20565b6138b39190614a8e565b60165f8282546138c39190614bda565b92505081905550601154601454826138db9190614a20565b6138e59190614a8e565b60175f8282546138f59190614bda565b925050819055506011546012548261390d9190614a20565b6139179190614a8e565b60155f8282546139279190614bda565b92505081905550613a51565b601a5f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16801561398a57505f600d54115b15613a50576139b760646139a9600d548861416990919063ffffffff16565b61417e90919063ffffffff16565b9050600d54600f54826139ca9190614a20565b6139d49190614a8e565b60165f8282546139e49190614bda565b92505081905550600d54601054826139fc9190614a20565b613a069190614a8e565b60175f828254613a169190614bda565b92505081905550600d54600e5482613a2e9190614a20565b613a389190614a8e565b60155f828254613a489190614bda565b925050819055505b5b5f811115613a6557613a64873083613bea565b5b8085613a71919061574d565b94505b613a7f878787613bea565b505050505b505050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b80601a5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603613c58576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613c4f90615357565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603613cc6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613cbd906153e5565b60405180910390fd5b613cd1838383614193565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905081811015613d54576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613d4b906157f0565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550815f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f828254613de29190614bda565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051613e4691906146a9565b60405180910390a3613e59848484614198565b50505050565b5f613e69306113fc565b90505f601754601554601654613e7f9190614bda565b613e899190614bda565b90505f80831480613e9957505f82145b15613ea657505050614167565b6014600954613eb59190614a20565b831115613ece576014600954613ecb9190614a20565b92505b5f60028360165486613ee09190614a20565b613eea9190614a8e565b613ef49190614a8e565b90505f613f0a828661419d90919063ffffffff16565b90505f479050613f19826141b2565b5f613f2d824761419d90919063ffffffff16565b90505f613f706002601654613f429190614a8e565b88613f4d919061574d565b613f626015548561416990919063ffffffff16565b61417e90919063ffffffff16565b90505f613fb36002601654613f859190614a8e565b89613f90919061574d565b613fa56017548661416990919063ffffffff16565b61417e90919063ffffffff16565b90505f818385613fc3919061574d565b613fcd919061574d565b90505f6016819055505f6015819055505f6017819055505f8211156140775760075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168260405161403190614c3a565b5f6040518083038185875af1925050503d805f811461406b576040519150601f19603f3d011682016040523d82523d5f602084013e614070565b606091505b5050809850505b5f8711801561408557505f81115b156140d25761409487826143e5565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb56186826016546040516140c99392919061580e565b60405180910390a15b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff164760405161411790614c3a565b5f6040518083038185875af1925050503d805f8114614151576040519150601f19603f3d011682016040523d82523d5f602084013e614156565b606091505b505080985050505050505050505050505b565b5f81836141769190614a20565b905092915050565b5f818361418b9190614a8e565b905092915050565b505050565b505050565b5f81836141aa919061574d565b905092915050565b5f600267ffffffffffffffff8111156141ce576141cd615843565b5b6040519080825280602002602001820160405280156141fc5781602001602082028036833780820191505090505b50905030815f8151811061421357614212615870565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156142b6573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906142da91906158b1565b816001815181106142ee576142ed615870565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050614353307f000000000000000000000000000000000000000000000000000000000000000084612c84565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663791ac947835f8430426040518663ffffffff1660e01b81526004016143b49594939291906159cc565b5f604051808303815f87803b1580156143cb575f80fd5b505af11580156143dd573d5f803e3d5ffd5b505050505050565b614410307f000000000000000000000000000000000000000000000000000000000000000084612c84565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663f305d7198230855f80614459611ae2565b426040518863ffffffff1660e01b815260040161447b96959493929190615a24565b60606040518083038185885af1158015614497573d5f803e3d5ffd5b50505050506040513d601f19601f820116820180604052508101906144bc9190615a83565b5050505050565b5f81519050919050565b5f82825260208201905092915050565b5f5b838110156144fa5780820151818401526020810190506144df565b5f8484015250505050565b5f601f19601f8301169050919050565b5f61451f826144c3565b61452981856144cd565b93506145398185602086016144dd565b61454281614505565b840191505092915050565b5f6020820190508181035f8301526145658184614515565b905092915050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f61459a82614571565b9050919050565b6145aa81614590565b81146145b4575f80fd5b50565b5f813590506145c5816145a1565b92915050565b5f819050919050565b6145dd816145cb565b81146145e7575f80fd5b50565b5f813590506145f8816145d4565b92915050565b5f80604083850312156146145761461361456d565b5b5f614621858286016145b7565b9250506020614632858286016145ea565b9150509250929050565b5f8115159050919050565b6146508161463c565b82525050565b5f6020820190506146695f830184614647565b92915050565b5f602082840312156146845761468361456d565b5b5f614691848285016145b7565b91505092915050565b6146a3816145cb565b82525050565b5f6020820190506146bc5f83018461469a565b92915050565b5f819050919050565b5f6146e56146e06146db84614571565b6146c2565b614571565b9050919050565b5f6146f6826146cb565b9050919050565b5f614707826146ec565b9050919050565b614717816146fd565b82525050565b5f6020820190506147305f83018461470e565b92915050565b5f6020828403121561474b5761474a61456d565b5b5f614758848285016145ea565b91505092915050565b5f805f606084860312156147785761477761456d565b5b5f614785868287016145b7565b9350506020614796868287016145b7565b92505060406147a7868287016145ea565b9150509250925092565b6147ba81614590565b82525050565b5f6020820190506147d35f8301846147b1565b92915050565b5f60ff82169050919050565b6147ee816147d9565b82525050565b5f6020820190506148075f8301846147e5565b92915050565b6148168161463c565b8114614820575f80fd5b50565b5f813590506148318161480d565b92915050565b5f806040838503121561484d5761484c61456d565b5b5f61485a858286016145b7565b925050602061486b85828601614823565b9150509250929050565b5f805f6060848603121561488c5761488b61456d565b5b5f614899868287016145ea565b93505060206148aa868287016145ea565b92505060406148bb868287016145ea565b9150509250925092565b5f602082840312156148da576148d961456d565b5b5f6148e784828501614823565b91505092915050565b5f80604083850312156149065761490561456d565b5b5f614913858286016145b7565b9250506020614924858286016145b7565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061497257607f821691505b6020821081036149855761498461492e565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f6149bf6020836144cd565b91506149ca8261498b565b602082019050919050565b5f6020820190508181035f8301526149ec816149b3565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f614a2a826145cb565b9150614a35836145cb565b9250828202614a43816145cb565b91508282048414831517614a5a57614a596149f3565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f614a98826145cb565b9150614aa3836145cb565b925082614ab357614ab2614a61565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e74205f8201527f6c6f776572207468616e20302e35250000000000000000000000000000000000602082015250565b5f614b18602f836144cd565b9150614b2382614abe565b604082019050919050565b5f6020820190508181035f830152614b4581614b0c565b9050919050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320615f8201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b5f614ba66028836144cd565b9150614bb182614b4c565b604082019050919050565b5f6020820190508181035f830152614bd381614b9a565b9050919050565b5f614be4826145cb565b9150614bef836145cb565b9250828201905080821115614c0757614c066149f3565b5b92915050565b5f81905092915050565b50565b5f614c255f83614c0d565b9150614c3082614c17565b5f82019050919050565b5f614c4482614c1a565b9150819050919050565b5f81519050614c5c816145d4565b92915050565b5f60208284031215614c7757614c7661456d565b5b5f614c8484828501614c4e565b91505092915050565b5f604082019050614ca05f8301856147b1565b614cad602083018461469a565b9392505050565b5f81519050614cc28161480d565b92915050565b5f60208284031215614cdd57614cdc61456d565b5b5f614cea84828501614cb4565b91505092915050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d205f8201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b5f614d4d6039836144cd565b9150614d5882614cf3565b604082019050919050565b5f6020820190508181035f830152614d7a81614d41565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f775f8201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b5f614ddb6025836144cd565b9150614de682614d81565b604082019050919050565b5f6020820190508181035f830152614e0881614dcf565b9050919050565b7f5f746f6b656e20616464726573732063616e6e6f7420626520300000000000005f82015250565b5f614e43601a836144cd565b9150614e4e82614e0f565b602082019050919050565b5f6020820190508181035f830152614e7081614e37565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e205f8201527f312e302500000000000000000000000000000000000000000000000000000000602082015250565b5f614ed16024836144cd565b9150614edc82614e77565b604082019050919050565b5f6020820190508181035f830152614efe81614ec5565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e5f8201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b5f614f5f6035836144cd565b9150614f6a82614f05565b604082019050919050565b5f6020820190508181035f830152614f8c81614f53565b9050919050565b7f5377617020616d6f756e742063616e6e6f7420626520686967686572207468615f8201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b5f614fed6034836144cd565b9150614ff882614f93565b604082019050919050565b5f6020820190508181035f83015261501a81614fe1565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f61507b6026836144cd565b915061508682615021565b604082019050919050565b5f6020820190508181035f8301526150a88161506f565b9050919050565b7f5465616d20686173207265766f6b656420626c61636b6c6973742072696768745f8201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b5f6151096021836144cd565b9150615114826150af565b604082019050919050565b5f6020820190508181035f830152615136816150fd565b9050919050565b7f43616e6e6f7420626c61636b6c69737420746f6b656e277320763220726f75745f8201527f6572206f7220763220706f6f6c2e000000000000000000000000000000000000602082015250565b5f615197602e836144cd565b91506151a28261513d565b604082019050919050565b5f6020820190508181035f8301526151c48161518b565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f6152256024836144cd565b9150615230826151cb565b604082019050919050565b5f6020820190508181035f83015261525281615219565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f6152b36022836144cd565b91506152be82615259565b604082019050919050565b5f6020820190508181035f8301526152e0816152a7565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f6153416025836144cd565b915061534c826152e7565b604082019050919050565b5f6020820190508181035f83015261536e81615335565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f6153cf6023836144cd565b91506153da82615375565b604082019050919050565b5f6020820190508181035f8301526153fc816153c3565b9050919050565b7f53656e64657220626c61636b6c697374656400000000000000000000000000005f82015250565b5f6154376012836144cd565b915061544282615403565b602082019050919050565b5f6020820190508181035f8301526154648161542b565b9050919050565b7f526563656976657220626c61636b6c69737465640000000000000000000000005f82015250565b5f61549f6014836144cd565b91506154aa8261546b565b602082019050919050565b5f6020820190508181035f8301526154cc81615493565b9050919050565b7f4e6f7420617574686f72697a656420746f207472616e73666572207072652d6d5f8201527f6967726174696f6e2e0000000000000000000000000000000000000000000000602082015250565b5f61552d6029836144cd565b9150615538826154d3565b604082019050919050565b5f6020820190508181035f83015261555a81615521565b9050919050565b7f54726164696e67206973206e6f74206163746976652e000000000000000000005f82015250565b5f6155956016836144cd565b91506155a082615561565b602082019050919050565b5f6020820190508181035f8301526155c281615589565b9050919050565b7f427579207472616e7366657220616d6f756e74206578636565647320746865205f8201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b5f6156236035836144cd565b915061562e826155c9565b604082019050919050565b5f6020820190508181035f83015261565081615617565b9050919050565b7f4d61782077616c6c6574206578636565646564000000000000000000000000005f82015250565b5f61568b6013836144cd565b915061569682615657565b602082019050919050565b5f6020820190508181035f8301526156b88161567f565b9050919050565b7f53656c6c207472616e7366657220616d6f756e742065786365656473207468655f8201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b5f6157196036836144cd565b9150615724826156bf565b604082019050919050565b5f6020820190508181035f8301526157468161570d565b9050919050565b5f615757826145cb565b9150615762836145cb565b925082820390508181111561577a576157796149f3565b5b92915050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320625f8201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b5f6157da6026836144cd565b91506157e582615780565b604082019050919050565b5f6020820190508181035f830152615807816157ce565b9050919050565b5f6060820190506158215f83018661469a565b61582e602083018561469a565b61583b604083018461469a565b949350505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f815190506158ab816145a1565b92915050565b5f602082840312156158c6576158c561456d565b5b5f6158d38482850161589d565b91505092915050565b5f819050919050565b5f6158ff6158fa6158f5846158dc565b6146c2565b6145cb565b9050919050565b61590f816158e5565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b61594781614590565b82525050565b5f615958838361593e565b60208301905092915050565b5f602082019050919050565b5f61597a82615915565b615984818561591f565b935061598f8361592f565b805f5b838110156159bf5781516159a6888261594d565b97506159b183615964565b925050600181019050615992565b5085935050505092915050565b5f60a0820190506159df5f83018861469a565b6159ec6020830187615906565b81810360408301526159fe8186615970565b9050615a0d60608301856147b1565b615a1a608083018461469a565b9695505050505050565b5f60c082019050615a375f8301896147b1565b615a44602083018861469a565b615a516040830187615906565b615a5e6060830186615906565b615a6b60808301856147b1565b615a7860a083018461469a565b979650505050505050565b5f805f60608486031215615a9a57615a9961456d565b5b5f615aa786828701614c4e565b9350506020615ab886828701614c4e565b9250506040615ac986828701614c4e565b915050925092509256fea2646970667358221220c99ac7c2979029178ffc8ebc2e9fddd06dd5174167ed217307a2d3715995725564736f6c63430008140033

Deployed Bytecode

0x6080604052600436106103bb575f3560e01c80637cb332bb116101f1578063c02466681161010c578063e2f456051161009f578063f8b45b051161006e578063f8b45b0514610dde578063f9f92be414610e08578063fde83a3414610e30578063fe575a8714610e5a576103c2565b8063e2f4560514610d38578063f11a24d314610d62578063f2fde38b14610d8c578063f637434214610db4576103c2565b8063d257b34f116100db578063d257b34f14610c6c578063d729715f14610ca8578063d85ba06314610cd2578063dd62ed3e14610cfc576103c2565b8063c024666814610bca578063c17b5b8c14610bf2578063c18bc19514610c1a578063c8c8ebe414610c42576103c2565b80639c2e4ac611610184578063adee28ff11610153578063adee28ff14610b14578063b62496f514610b3c578063bbc0c74214610b78578063bc205ad314610ba2576103c2565b80639c2e4ac614610a4a578063a457c2d714610a74578063a9059cbb14610ab0578063aa0e438814610aec576103c2565b80638ddb4ee5116101c05780638ddb4ee5146109ba578063924de9b7146109d057806395d89b41146109f85780639a7a23d614610a22576103c2565b80637cb332bb1461092a5780638095d564146109525780638a8c523c1461097a5780638da5cb5b14610990576103c2565b80633dc599ff116102e15780636ddd1713116102745780637571336a116102435780637571336a1461088857806375e3661e146108b0578063782c4e99146108d85780637ca8448a14610902576103c2565b80636ddd1713146107e257806370a082311461080c578063715018a614610848578063751039fc1461085e576103c2565b80634fbee193116102b05780634fbee1931461073c57806359927044146107785780635f189361146107a25780636a486a8e146107b8576103c2565b80633dc599ff1461068257806349bd5a5e146106ac5780634a62bb65146106d65780634e29e52314610700576103c2565b806319eab0421161035957806324b9f3c11161032857806324b9f3c1146105c857806327c8f835146105f2578063313ce5671461061c5780633950935114610646576103c2565b806319eab042146105105780631a8145bb1461053a578063203e727e1461056457806323b872dd1461058c576103c2565b806310d5de531161039557806310d5de5314610456578063156c2f35146104925780631694505e146104bc57806318160ddd146104e6576103c2565b806306fdde03146103c6578063095ea7b3146103f05780630e922ca71461042c576103c2565b366103c257005b5f80fd5b3480156103d1575f80fd5b506103da610e96565b6040516103e7919061454d565b60405180910390f35b3480156103fb575f80fd5b50610416600480360381019061041191906145fe565b610f26565b6040516104239190614656565b60405180910390f35b348015610437575f80fd5b50610440610f43565b60405161044d9190614656565b60405180910390f35b348015610461575f80fd5b5061047c6004803603810190610477919061466f565b610f55565b6040516104899190614656565b60405180910390f35b34801561049d575f80fd5b506104a6610f72565b6040516104b391906146a9565b60405180910390f35b3480156104c7575f80fd5b506104d0610f78565b6040516104dd919061471d565b60405180910390f35b3480156104f1575f80fd5b506104fa610f9c565b60405161050791906146a9565b60405180910390f35b34801561051b575f80fd5b50610524610fa5565b60405161053191906146a9565b60405180910390f35b348015610545575f80fd5b5061054e610fab565b60405161055b91906146a9565b60405180910390f35b34801561056f575f80fd5b5061058a60048036038101906105859190614736565b610fb1565b005b348015610597575f80fd5b506105b260048036038101906105ad9190614761565b6110c0565b6040516105bf9190614656565b60405180910390f35b3480156105d3575f80fd5b506105dc6111b2565b6040516105e991906146a9565b60405180910390f35b3480156105fd575f80fd5b506106066111b8565b60405161061391906147c0565b60405180910390f35b348015610627575f80fd5b506106306111be565b60405161063d91906147f4565b60405180910390f35b348015610651575f80fd5b5061066c600480360381019061066791906145fe565b6111c6565b6040516106799190614656565b60405180910390f35b34801561068d575f80fd5b5061069661126d565b6040516106a39190614656565b60405180910390f35b3480156106b7575f80fd5b506106c0611280565b6040516106cd91906147c0565b60405180910390f35b3480156106e1575f80fd5b506106ea6112a4565b6040516106f79190614656565b60405180910390f35b34801561070b575f80fd5b506107266004803603810190610721919061466f565b6112b6565b6040516107339190614656565b60405180910390f35b348015610747575f80fd5b50610762600480360381019061075d919061466f565b6112d3565b60405161076f9190614656565b60405180910390f35b348015610783575f80fd5b5061078c611325565b60405161079991906147c0565b60405180910390f35b3480156107ad575f80fd5b506107b661134a565b005b3480156107c3575f80fd5b506107cc6113e3565b6040516107d991906146a9565b60405180910390f35b3480156107ed575f80fd5b506107f66113e9565b6040516108039190614656565b60405180910390f35b348015610817575f80fd5b50610832600480360381019061082d919061466f565b6113fc565b60405161083f91906146a9565b60405180910390f35b348015610853575f80fd5b5061085c611441565b005b348015610869575f80fd5b506108726114c8565b60405161087f9190614656565b60405180910390f35b348015610893575f80fd5b506108ae60048036038101906108a99190614837565b611565565b005b3480156108bb575f80fd5b506108d660048036038101906108d1919061466f565b611639565b005b3480156108e3575f80fd5b506108ec61170c565b6040516108f991906147c0565b60405180910390f35b34801561090d575f80fd5b506109286004803603810190610923919061466f565b611731565b005b348015610935575f80fd5b50610950600480360381019061094b919061466f565b611822565b005b34801561095d575f80fd5b5061097860048036038101906109739190614875565b61195c565b005b348015610985575f80fd5b5061098e611a15565b005b34801561099b575f80fd5b506109a4611ae2565b6040516109b191906147c0565b60405180910390f35b3480156109c5575f80fd5b506109ce611b0a565b005b3480156109db575f80fd5b506109f660048036038101906109f191906148c5565b611cc4565b005b348015610a03575f80fd5b50610a0c611d5d565b604051610a19919061454d565b60405180910390f35b348015610a2d575f80fd5b50610a486004803603810190610a439190614837565b611ded565b005b348015610a55575f80fd5b50610a5e611f05565b604051610a6b91906146a9565b60405180910390f35b348015610a7f575f80fd5b50610a9a6004803603810190610a9591906145fe565b611f0b565b604051610aa79190614656565b60405180910390f35b348015610abb575f80fd5b50610ad66004803603810190610ad191906145fe565b611ff1565b604051610ae39190614656565b60405180910390f35b348015610af7575f80fd5b50610b126004803603810190610b0d9190614837565b61200e565b005b348015610b1f575f80fd5b50610b3a6004803603810190610b35919061466f565b6120f6565b005b348015610b47575f80fd5b50610b626004803603810190610b5d919061466f565b612230565b604051610b6f9190614656565b60405180910390f35b348015610b83575f80fd5b50610b8c61224d565b604051610b999190614656565b60405180910390f35b348015610bad575f80fd5b50610bc86004803603810190610bc391906148f0565b612260565b005b348015610bd5575f80fd5b50610bf06004803603810190610beb9190614837565b612446565b005b348015610bfd575f80fd5b50610c186004803603810190610c139190614875565b612568565b005b348015610c25575f80fd5b50610c406004803603810190610c3b9190614736565b612621565b005b348015610c4d575f80fd5b50610c56612730565b604051610c6391906146a9565b60405180910390f35b348015610c77575f80fd5b50610c926004803603810190610c8d9190614736565b612736565b604051610c9f9190614656565b60405180910390f35b348015610cb3575f80fd5b50610cbc61288a565b604051610cc991906146a9565b60405180910390f35b348015610cdd575f80fd5b50610ce6612890565b604051610cf391906146a9565b60405180910390f35b348015610d07575f80fd5b50610d226004803603810190610d1d91906148f0565b612896565b604051610d2f91906146a9565b60405180910390f35b348015610d43575f80fd5b50610d4c612918565b604051610d5991906146a9565b60405180910390f35b348015610d6d575f80fd5b50610d7661291e565b604051610d8391906146a9565b60405180910390f35b348015610d97575f80fd5b50610db26004803603810190610dad919061466f565b612924565b005b348015610dbf575f80fd5b50610dc8612a1a565b604051610dd591906146a9565b60405180910390f35b348015610de9575f80fd5b50610df2612a20565b604051610dff91906146a9565b60405180910390f35b348015610e13575f80fd5b50610e2e6004803603810190610e29919061466f565b612a26565b005b348015610e3b575f80fd5b50610e44612c25565b604051610e5191906146a9565b60405180910390f35b348015610e65575f80fd5b50610e806004803603810190610e7b919061466f565b612c2b565b604051610e8d9190614656565b60405180910390f35b606060038054610ea59061495b565b80601f0160208091040260200160405190810160405280929190818152602001828054610ed19061495b565b8015610f1c5780601f10610ef357610100808354040283529160200191610f1c565b820191905f5260205f20905b815481529060010190602001808311610eff57829003601f168201915b5050505050905090565b5f610f39610f32612c7d565b8484612c84565b6001905092915050565b601b5f9054906101000a900460ff1681565b6019602052805f5260405f205f915054906101000a900460ff1681565b600e5481565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b5f600254905090565b60125481565b60165481565b610fb9612c7d565b73ffffffffffffffffffffffffffffffffffffffff16610fd7611ae2565b73ffffffffffffffffffffffffffffffffffffffff161461102d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611024906149d5565b60405180910390fd5b670de0b6b3a76400006103e86005611043610f9c565b61104d9190614a20565b6110579190614a8e565b6110619190614a8e565b8110156110a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161109a90614b2e565b60405180910390fd5b670de0b6b3a7640000816110b79190614a20565b60088190555050565b5f6110cc848484612e47565b5f60015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f611113612c7d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905082811015611192576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161118990614bbc565b60405180910390fd5b6111a68561119e612c7d565b858403612c84565b60019150509392505050565b60155481565b61dead81565b5f6012905090565b5f6112636111d2612c7d565b848460015f6111df612c7d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205461125e9190614bda565b612c84565b6001905092915050565b600b60039054906101000a900460ff1681565b7f0000000000000000000000001976a37bad03959bd00a6a6319b0b1bb214c61a581565b600b5f9054906101000a900460ff1681565b601c602052805f5260405f205f915054906101000a900460ff1681565b5f60185f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169050919050565b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611352612c7d565b73ffffffffffffffffffffffffffffffffffffffff16611370611ae2565b73ffffffffffffffffffffffffffffffffffffffff16146113c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113bd906149d5565b60405180910390fd5b6001600b60036101000a81548160ff021916908315150217905550565b60115481565b600b60029054906101000a900460ff1681565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b611449612c7d565b73ffffffffffffffffffffffffffffffffffffffff16611467611ae2565b73ffffffffffffffffffffffffffffffffffffffff16146114bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114b4906149d5565b60405180910390fd5b6114c65f613a89565b565b5f6114d1612c7d565b73ffffffffffffffffffffffffffffffffffffffff166114ef611ae2565b73ffffffffffffffffffffffffffffffffffffffff1614611545576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161153c906149d5565b60405180910390fd5b5f600b5f6101000a81548160ff0219169083151502179055506001905090565b61156d612c7d565b73ffffffffffffffffffffffffffffffffffffffff1661158b611ae2565b73ffffffffffffffffffffffffffffffffffffffff16146115e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115d8906149d5565b60405180910390fd5b8060195f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b611641612c7d565b73ffffffffffffffffffffffffffffffffffffffff1661165f611ae2565b73ffffffffffffffffffffffffffffffffffffffff16146116b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116ac906149d5565b60405180910390fd5b5f600c5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff02191690831515021790555050565b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611739612c7d565b73ffffffffffffffffffffffffffffffffffffffff16611757611ae2565b73ffffffffffffffffffffffffffffffffffffffff16146117ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117a4906149d5565b60405180910390fd5b5f8173ffffffffffffffffffffffffffffffffffffffff16476040516117d290614c3a565b5f6040518083038185875af1925050503d805f811461180c576040519150601f19603f3d011682016040523d82523d5f602084013e611811565b606091505b505090508061181e575f80fd5b5050565b61182a612c7d565b73ffffffffffffffffffffffffffffffffffffffff16611848611ae2565b73ffffffffffffffffffffffffffffffffffffffff161461189e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611895906149d5565b60405180910390fd5b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8aa0f85050aca99be43beb823e0457e77966b3baf697a289b03681978f96166860405160405180910390a38060075f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b611964612c7d565b73ffffffffffffffffffffffffffffffffffffffff16611982611ae2565b73ffffffffffffffffffffffffffffffffffffffff16146119d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119cf906149d5565b60405180910390fd5b82600e8190555081600f8190555080601081905550601054600f54600e54611a009190614bda565b611a0a9190614bda565b600d81905550505050565b611a1d612c7d565b73ffffffffffffffffffffffffffffffffffffffff16611a3b611ae2565b73ffffffffffffffffffffffffffffffffffffffff1614611a91576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a88906149d5565b60405180910390fd5b6001600b60016101000a81548160ff0219169083151502179055506001600b60026101000a81548160ff0219169083151502179055505f601b5f6101000a81548160ff021916908315150217905550565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611b12612c7d565b73ffffffffffffffffffffffffffffffffffffffff16611b30611ae2565b73ffffffffffffffffffffffffffffffffffffffff1614611b86576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b7d906149d5565b60405180910390fd5b5f3073ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401611bc091906147c0565b602060405180830381865afa158015611bdb573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611bff9190614c62565b90503073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b8152600401611c3c929190614c8d565b6020604051808303815f875af1158015611c58573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611c7c9190614cc8565b503373ffffffffffffffffffffffffffffffffffffffff166108fc4790811502906040515f60405180830381858888f19350505050158015611cc0573d5f803e3d5ffd5b5050565b611ccc612c7d565b73ffffffffffffffffffffffffffffffffffffffff16611cea611ae2565b73ffffffffffffffffffffffffffffffffffffffff1614611d40576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d37906149d5565b60405180910390fd5b80600b60026101000a81548160ff02191690831515021790555050565b606060048054611d6c9061495b565b80601f0160208091040260200160405190810160405280929190818152602001828054611d989061495b565b8015611de35780601f10611dba57610100808354040283529160200191611de3565b820191905f5260205f20905b815481529060010190602001808311611dc657829003601f168201915b5050505050905090565b611df5612c7d565b73ffffffffffffffffffffffffffffffffffffffff16611e13611ae2565b73ffffffffffffffffffffffffffffffffffffffff1614611e69576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e60906149d5565b60405180910390fd5b7f0000000000000000000000001976a37bad03959bd00a6a6319b0b1bb214c61a573ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611ef7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eee90614d63565b60405180910390fd5b611f018282613b4c565b5050565b60105481565b5f8060015f611f18612c7d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905082811015611fd2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fc990614df1565b60405180910390fd5b611fe6611fdd612c7d565b85858403612c84565b600191505092915050565b5f612004611ffd612c7d565b8484612e47565b6001905092915050565b612016612c7d565b73ffffffffffffffffffffffffffffffffffffffff16612034611ae2565b73ffffffffffffffffffffffffffffffffffffffff161461208a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612081906149d5565b60405180910390fd5b80601c5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055506120e88282612446565b6120f28282611565565b5050565b6120fe612c7d565b73ffffffffffffffffffffffffffffffffffffffff1661211c611ae2565b73ffffffffffffffffffffffffffffffffffffffff1614612172576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612169906149d5565b60405180910390fd5b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167fc9f2d63eee8632b33d7a7db5252eb29036e81ee4fbe29260febe0c49ffb8a7bb60405160405180910390a38060065f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b601a602052805f5260405f205f915054906101000a900460ff1681565b600b60019054906101000a900460ff1681565b612268612c7d565b73ffffffffffffffffffffffffffffffffffffffff16612286611ae2565b73ffffffffffffffffffffffffffffffffffffffff16146122dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122d3906149d5565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361234a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161234190614e59565b60405180910390fd5b5f8273ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161238491906147c0565b602060405180830381865afa15801561239f573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906123c39190614c62565b90508273ffffffffffffffffffffffffffffffffffffffff1663a9059cbb83836040518363ffffffff1660e01b8152600401612400929190614c8d565b6020604051808303815f875af115801561241c573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906124409190614cc8565b50505050565b61244e612c7d565b73ffffffffffffffffffffffffffffffffffffffff1661246c611ae2565b73ffffffffffffffffffffffffffffffffffffffff16146124c2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124b9906149d5565b60405180910390fd5b8060185f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df78260405161255c9190614656565b60405180910390a25050565b612570612c7d565b73ffffffffffffffffffffffffffffffffffffffff1661258e611ae2565b73ffffffffffffffffffffffffffffffffffffffff16146125e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125db906149d5565b60405180910390fd5b82601281905550816013819055508060148190555060145460135460125461260c9190614bda565b6126169190614bda565b601181905550505050565b612629612c7d565b73ffffffffffffffffffffffffffffffffffffffff16612647611ae2565b73ffffffffffffffffffffffffffffffffffffffff161461269d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612694906149d5565b60405180910390fd5b670de0b6b3a76400006103e8600a6126b3610f9c565b6126bd9190614a20565b6126c79190614a8e565b6126d19190614a8e565b811015612713576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161270a90614ee7565b60405180910390fd5b670de0b6b3a7640000816127279190614a20565b600a8190555050565b60085481565b5f61273f612c7d565b73ffffffffffffffffffffffffffffffffffffffff1661275d611ae2565b73ffffffffffffffffffffffffffffffffffffffff16146127b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127aa906149d5565b60405180910390fd5b620186a060016127c1610f9c565b6127cb9190614a20565b6127d59190614a8e565b821015612817576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161280e90614f75565b60405180910390fd5b6103e86005612824610f9c565b61282e9190614a20565b6128389190614a8e565b82111561287a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161287190615003565b60405180910390fd5b8160098190555060019050919050565b60145481565b600d5481565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b60095481565b600f5481565b61292c612c7d565b73ffffffffffffffffffffffffffffffffffffffff1661294a611ae2565b73ffffffffffffffffffffffffffffffffffffffff16146129a0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612997906149d5565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603612a0e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a0590615091565b60405180910390fd5b612a1781613a89565b50565b60135481565b600a5481565b612a2e612c7d565b73ffffffffffffffffffffffffffffffffffffffff16612a4c611ae2565b73ffffffffffffffffffffffffffffffffffffffff1614612aa2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a99906149d5565b60405180910390fd5b600b60039054906101000a900460ff1615612af2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ae99061511f565b60405180910390fd5b7f0000000000000000000000001976a37bad03959bd00a6a6319b0b1bb214c61a573ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614158015612b8e5750737a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b612bcd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bc4906151ad565b60405180910390fd5b6001600c5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff02191690831515021790555050565b60175481565b5f600c5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169050919050565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612cf2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ce99061523b565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612d60576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d57906152c9565b60405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051612e3a91906146a9565b60405180910390a3505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612eb5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612eac90615357565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612f23576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f1a906153e5565b60405180910390fd5b600c5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1615612fad576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fa49061544d565b60405180910390fd5b600c5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1615613037576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161302e906154b5565b60405180910390fd5b601b5f9054906101000a900460ff16156130d557601c5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff166130d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130cb90615543565b60405180910390fd5b5b5f81036130ec576130e783835f613bea565b613a84565b600b5f9054906101000a900460ff16156135d057613108611ae2565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156131765750613146611ae2565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156131ae57505f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156131e8575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156132015750600560149054906101000a900460ff16155b156135cf57600b60019054906101000a900460ff166132f55760185f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16806132b5575060185f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b6132f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132eb906155ab565b60405180910390fd5b5b601a5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168015613392575060195f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15613439576008548111156133dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133d390615639565b60405180910390fd5b600a546133e8836113fc565b826133f39190614bda565b1115613434576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161342b906156a1565b60405180910390fd5b6135ce565b601a5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680156134d6575060195f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b1561352557600854811115613520576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016135179061572f565b60405180910390fd5b6135cd565b60195f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff166135cc57600a5461357f836113fc565b8261358a9190614bda565b11156135cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016135c2906156a1565b60405180910390fd5b5b5b5b5b5b5f6135da306113fc565b90505f60095482101590508080156135fe5750600b60029054906101000a900460ff165b80156136175750600560149054906101000a900460ff16155b801561366a5750601a5f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b80156136bd575060185f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b8015613710575060185f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15613753576001600560146101000a81548160ff021916908315150217905550613738613e5f565b5f600560146101000a81548160ff0219169083151502179055505b5f600560149054906101000a900460ff1615905060185f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680613802575060185f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b1561380b575f90505b5f8115613a7457601a5f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16801561386957505f601154115b156139335761389660646138886011548861416990919063ffffffff16565b61417e90919063ffffffff16565b9050601154601354826138a99190614a20565b6138b39190614a8e565b60165f8282546138c39190614bda565b92505081905550601154601454826138db9190614a20565b6138e59190614a8e565b60175f8282546138f59190614bda565b925050819055506011546012548261390d9190614a20565b6139179190614a8e565b60155f8282546139279190614bda565b92505081905550613a51565b601a5f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16801561398a57505f600d54115b15613a50576139b760646139a9600d548861416990919063ffffffff16565b61417e90919063ffffffff16565b9050600d54600f54826139ca9190614a20565b6139d49190614a8e565b60165f8282546139e49190614bda565b92505081905550600d54601054826139fc9190614a20565b613a069190614a8e565b60175f828254613a169190614bda565b92505081905550600d54600e5482613a2e9190614a20565b613a389190614a8e565b60155f828254613a489190614bda565b925050819055505b5b5f811115613a6557613a64873083613bea565b5b8085613a71919061574d565b94505b613a7f878787613bea565b505050505b505050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b80601a5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603613c58576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613c4f90615357565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603613cc6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613cbd906153e5565b60405180910390fd5b613cd1838383614193565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905081811015613d54576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613d4b906157f0565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550815f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f828254613de29190614bda565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051613e4691906146a9565b60405180910390a3613e59848484614198565b50505050565b5f613e69306113fc565b90505f601754601554601654613e7f9190614bda565b613e899190614bda565b90505f80831480613e9957505f82145b15613ea657505050614167565b6014600954613eb59190614a20565b831115613ece576014600954613ecb9190614a20565b92505b5f60028360165486613ee09190614a20565b613eea9190614a8e565b613ef49190614a8e565b90505f613f0a828661419d90919063ffffffff16565b90505f479050613f19826141b2565b5f613f2d824761419d90919063ffffffff16565b90505f613f706002601654613f429190614a8e565b88613f4d919061574d565b613f626015548561416990919063ffffffff16565b61417e90919063ffffffff16565b90505f613fb36002601654613f859190614a8e565b89613f90919061574d565b613fa56017548661416990919063ffffffff16565b61417e90919063ffffffff16565b90505f818385613fc3919061574d565b613fcd919061574d565b90505f6016819055505f6015819055505f6017819055505f8211156140775760075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168260405161403190614c3a565b5f6040518083038185875af1925050503d805f811461406b576040519150601f19603f3d011682016040523d82523d5f602084013e614070565b606091505b5050809850505b5f8711801561408557505f81115b156140d25761409487826143e5565b7f17bbfb9a6069321b6ded73bd96327c9e6b7212a5cd51ff219cd61370acafb56186826016546040516140c99392919061580e565b60405180910390a15b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff164760405161411790614c3a565b5f6040518083038185875af1925050503d805f8114614151576040519150601f19603f3d011682016040523d82523d5f602084013e614156565b606091505b505080985050505050505050505050505b565b5f81836141769190614a20565b905092915050565b5f818361418b9190614a8e565b905092915050565b505050565b505050565b5f81836141aa919061574d565b905092915050565b5f600267ffffffffffffffff8111156141ce576141cd615843565b5b6040519080825280602002602001820160405280156141fc5781602001602082028036833780820191505090505b50905030815f8151811061421357614212615870565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156142b6573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906142da91906158b1565b816001815181106142ee576142ed615870565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050614353307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84612c84565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663791ac947835f8430426040518663ffffffff1660e01b81526004016143b49594939291906159cc565b5f604051808303815f87803b1580156143cb575f80fd5b505af11580156143dd573d5f803e3d5ffd5b505050505050565b614410307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84612c84565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d73ffffffffffffffffffffffffffffffffffffffff1663f305d7198230855f80614459611ae2565b426040518863ffffffff1660e01b815260040161447b96959493929190615a24565b60606040518083038185885af1158015614497573d5f803e3d5ffd5b50505050506040513d601f19601f820116820180604052508101906144bc9190615a83565b5050505050565b5f81519050919050565b5f82825260208201905092915050565b5f5b838110156144fa5780820151818401526020810190506144df565b5f8484015250505050565b5f601f19601f8301169050919050565b5f61451f826144c3565b61452981856144cd565b93506145398185602086016144dd565b61454281614505565b840191505092915050565b5f6020820190508181035f8301526145658184614515565b905092915050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f61459a82614571565b9050919050565b6145aa81614590565b81146145b4575f80fd5b50565b5f813590506145c5816145a1565b92915050565b5f819050919050565b6145dd816145cb565b81146145e7575f80fd5b50565b5f813590506145f8816145d4565b92915050565b5f80604083850312156146145761461361456d565b5b5f614621858286016145b7565b9250506020614632858286016145ea565b9150509250929050565b5f8115159050919050565b6146508161463c565b82525050565b5f6020820190506146695f830184614647565b92915050565b5f602082840312156146845761468361456d565b5b5f614691848285016145b7565b91505092915050565b6146a3816145cb565b82525050565b5f6020820190506146bc5f83018461469a565b92915050565b5f819050919050565b5f6146e56146e06146db84614571565b6146c2565b614571565b9050919050565b5f6146f6826146cb565b9050919050565b5f614707826146ec565b9050919050565b614717816146fd565b82525050565b5f6020820190506147305f83018461470e565b92915050565b5f6020828403121561474b5761474a61456d565b5b5f614758848285016145ea565b91505092915050565b5f805f606084860312156147785761477761456d565b5b5f614785868287016145b7565b9350506020614796868287016145b7565b92505060406147a7868287016145ea565b9150509250925092565b6147ba81614590565b82525050565b5f6020820190506147d35f8301846147b1565b92915050565b5f60ff82169050919050565b6147ee816147d9565b82525050565b5f6020820190506148075f8301846147e5565b92915050565b6148168161463c565b8114614820575f80fd5b50565b5f813590506148318161480d565b92915050565b5f806040838503121561484d5761484c61456d565b5b5f61485a858286016145b7565b925050602061486b85828601614823565b9150509250929050565b5f805f6060848603121561488c5761488b61456d565b5b5f614899868287016145ea565b93505060206148aa868287016145ea565b92505060406148bb868287016145ea565b9150509250925092565b5f602082840312156148da576148d961456d565b5b5f6148e784828501614823565b91505092915050565b5f80604083850312156149065761490561456d565b5b5f614913858286016145b7565b9250506020614924858286016145b7565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061497257607f821691505b6020821081036149855761498461492e565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f6149bf6020836144cd565b91506149ca8261498b565b602082019050919050565b5f6020820190508181035f8301526149ec816149b3565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f614a2a826145cb565b9150614a35836145cb565b9250828202614a43816145cb565b91508282048414831517614a5a57614a596149f3565b5b5092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f614a98826145cb565b9150614aa3836145cb565b925082614ab357614ab2614a61565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e74205f8201527f6c6f776572207468616e20302e35250000000000000000000000000000000000602082015250565b5f614b18602f836144cd565b9150614b2382614abe565b604082019050919050565b5f6020820190508181035f830152614b4581614b0c565b9050919050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320615f8201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b5f614ba66028836144cd565b9150614bb182614b4c565b604082019050919050565b5f6020820190508181035f830152614bd381614b9a565b9050919050565b5f614be4826145cb565b9150614bef836145cb565b9250828201905080821115614c0757614c066149f3565b5b92915050565b5f81905092915050565b50565b5f614c255f83614c0d565b9150614c3082614c17565b5f82019050919050565b5f614c4482614c1a565b9150819050919050565b5f81519050614c5c816145d4565b92915050565b5f60208284031215614c7757614c7661456d565b5b5f614c8484828501614c4e565b91505092915050565b5f604082019050614ca05f8301856147b1565b614cad602083018461469a565b9392505050565b5f81519050614cc28161480d565b92915050565b5f60208284031215614cdd57614cdc61456d565b5b5f614cea84828501614cb4565b91505092915050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d205f8201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b5f614d4d6039836144cd565b9150614d5882614cf3565b604082019050919050565b5f6020820190508181035f830152614d7a81614d41565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f775f8201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b5f614ddb6025836144cd565b9150614de682614d81565b604082019050919050565b5f6020820190508181035f830152614e0881614dcf565b9050919050565b7f5f746f6b656e20616464726573732063616e6e6f7420626520300000000000005f82015250565b5f614e43601a836144cd565b9150614e4e82614e0f565b602082019050919050565b5f6020820190508181035f830152614e7081614e37565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e205f8201527f312e302500000000000000000000000000000000000000000000000000000000602082015250565b5f614ed16024836144cd565b9150614edc82614e77565b604082019050919050565b5f6020820190508181035f830152614efe81614ec5565b9050919050565b7f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e5f8201527f20302e3030312520746f74616c20737570706c792e0000000000000000000000602082015250565b5f614f5f6035836144cd565b9150614f6a82614f05565b604082019050919050565b5f6020820190508181035f830152614f8c81614f53565b9050919050565b7f5377617020616d6f756e742063616e6e6f7420626520686967686572207468615f8201527f6e20302e352520746f74616c20737570706c792e000000000000000000000000602082015250565b5f614fed6034836144cd565b9150614ff882614f93565b604082019050919050565b5f6020820190508181035f83015261501a81614fe1565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f61507b6026836144cd565b915061508682615021565b604082019050919050565b5f6020820190508181035f8301526150a88161506f565b9050919050565b7f5465616d20686173207265766f6b656420626c61636b6c6973742072696768745f8201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b5f6151096021836144cd565b9150615114826150af565b604082019050919050565b5f6020820190508181035f830152615136816150fd565b9050919050565b7f43616e6e6f7420626c61636b6c69737420746f6b656e277320763220726f75745f8201527f6572206f7220763220706f6f6c2e000000000000000000000000000000000000602082015250565b5f615197602e836144cd565b91506151a28261513d565b604082019050919050565b5f6020820190508181035f8301526151c48161518b565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f6152256024836144cd565b9150615230826151cb565b604082019050919050565b5f6020820190508181035f83015261525281615219565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f6152b36022836144cd565b91506152be82615259565b604082019050919050565b5f6020820190508181035f8301526152e0816152a7565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f6153416025836144cd565b915061534c826152e7565b604082019050919050565b5f6020820190508181035f83015261536e81615335565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f6153cf6023836144cd565b91506153da82615375565b604082019050919050565b5f6020820190508181035f8301526153fc816153c3565b9050919050565b7f53656e64657220626c61636b6c697374656400000000000000000000000000005f82015250565b5f6154376012836144cd565b915061544282615403565b602082019050919050565b5f6020820190508181035f8301526154648161542b565b9050919050565b7f526563656976657220626c61636b6c69737465640000000000000000000000005f82015250565b5f61549f6014836144cd565b91506154aa8261546b565b602082019050919050565b5f6020820190508181035f8301526154cc81615493565b9050919050565b7f4e6f7420617574686f72697a656420746f207472616e73666572207072652d6d5f8201527f6967726174696f6e2e0000000000000000000000000000000000000000000000602082015250565b5f61552d6029836144cd565b9150615538826154d3565b604082019050919050565b5f6020820190508181035f83015261555a81615521565b9050919050565b7f54726164696e67206973206e6f74206163746976652e000000000000000000005f82015250565b5f6155956016836144cd565b91506155a082615561565b602082019050919050565b5f6020820190508181035f8301526155c281615589565b9050919050565b7f427579207472616e7366657220616d6f756e74206578636565647320746865205f8201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b5f6156236035836144cd565b915061562e826155c9565b604082019050919050565b5f6020820190508181035f83015261565081615617565b9050919050565b7f4d61782077616c6c6574206578636565646564000000000000000000000000005f82015250565b5f61568b6013836144cd565b915061569682615657565b602082019050919050565b5f6020820190508181035f8301526156b88161567f565b9050919050565b7f53656c6c207472616e7366657220616d6f756e742065786365656473207468655f8201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b5f6157196036836144cd565b9150615724826156bf565b604082019050919050565b5f6020820190508181035f8301526157468161570d565b9050919050565b5f615757826145cb565b9150615762836145cb565b925082820390508181111561577a576157796149f3565b5b92915050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320625f8201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b5f6157da6026836144cd565b91506157e582615780565b604082019050919050565b5f6020820190508181035f830152615807816157ce565b9050919050565b5f6060820190506158215f83018661469a565b61582e602083018561469a565b61583b604083018461469a565b949350505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f815190506158ab816145a1565b92915050565b5f602082840312156158c6576158c561456d565b5b5f6158d38482850161589d565b91505092915050565b5f819050919050565b5f6158ff6158fa6158f5846158dc565b6146c2565b6145cb565b9050919050565b61590f816158e5565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b61594781614590565b82525050565b5f615958838361593e565b60208301905092915050565b5f602082019050919050565b5f61597a82615915565b615984818561591f565b935061598f8361592f565b805f5b838110156159bf5781516159a6888261594d565b97506159b183615964565b925050600181019050615992565b5085935050505092915050565b5f60a0820190506159df5f83018861469a565b6159ec6020830187615906565b81810360408301526159fe8186615970565b9050615a0d60608301856147b1565b615a1a608083018461469a565b9695505050505050565b5f60c082019050615a375f8301896147b1565b615a44602083018861469a565b615a516040830187615906565b615a5e6060830186615906565b615a6b60808301856147b1565b615a7860a083018461469a565b979650505050505050565b5f805f60608486031215615a9a57615a9961456d565b5b5f615aa786828701614c4e565b9350506020615ab886828701614c4e565b9250506040615ac986828701614c4e565b915050925092509256fea2646970667358221220c99ac7c2979029178ffc8ebc2e9fddd06dd5174167ed217307a2d3715995725564736f6c63430008140033

Deployed Bytecode Sourcemap

29500:15633:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8809:94;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10888:159;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30984:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30705:63;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30223:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29574:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9893:102;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30357:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30498:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34588:249;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;11523:446;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30461:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29673:53;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9747:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12372:205;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30050:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29630;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29936:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31025:57;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37025:120;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29795:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44117:84;;;;;;;;;;;;;:::i;:::-;;30324:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30012:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10052:121;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2480:97;;;;;;;;;;;;;:::i;:::-;;33977:111;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35080:147;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44788:92;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29761:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43887:180;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36868:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35419:300;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33795:134;;;;;;;;;;;;;:::i;:::-;;1857:81;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43362:239;;;;;;;;;;;;;:::i;:::-;;35319:94;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;9016:98;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36217:264;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30292:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13074:385;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10380:165;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44886:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36671:191;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30920:57;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29974:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43607:274;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36039:172;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35725:308;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34843:231;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29827:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34154:428;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30428:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30191:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10602:145;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29867:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30257:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2726:191;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30392:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29905:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44300:359;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30536:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37151:107;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8809:94;8863:13;8892:5;8885:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8809:94;:::o;10888:159::-;10971:4;10984:39;10993:12;:10;:12::i;:::-;11007:7;11016:6;10984:8;:39::i;:::-;11037:4;11030:11;;10888:159;;;;:::o;30984:36::-;;;;;;;;;;;;;:::o;30705:63::-;;;;;;;;;;;;;;;;;;;;;;:::o;30223:29::-;;;;:::o;29574:51::-;;;:::o;9893:102::-;9954:7;9977:12;;9970:19;;9893:102;:::o;30357:30::-;;;;:::o;30498:33::-;;;;:::o;34588:249::-;2072:12;:10;:12::i;:::-;2061:23;;:7;:5;:7::i;:::-;:23;;;2053:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;34715:4:::1;34707;34702:1;34686:13;:11;:13::i;:::-;:17;;;;:::i;:::-;34685:26;;;;:::i;:::-;34684:35;;;;:::i;:::-;34674:6;:45;;34658:126;;;;;;;;;;;;:::i;:::-;;;;;;;;;34824:6;34814;:17;;;;:::i;:::-;34791:20;:40;;;;34588:249:::0;:::o;11523:446::-;11649:4;11662:36;11672:6;11680:9;11691:6;11662:9;:36::i;:::-;11707:24;11734:11;:19;11746:6;11734:19;;;;;;;;;;;;;;;:33;11754:12;:10;:12::i;:::-;11734:33;;;;;;;;;;;;;;;;11707:60;;11802:6;11782:16;:26;;11774:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;11879:57;11888:6;11896:12;:10;:12::i;:::-;11929:6;11910:16;:25;11879:8;:57::i;:::-;11959:4;11952:11;;;11523:446;;;;;:::o;30461:32::-;;;;:::o;29673:53::-;29719:6;29673:53;:::o;9747:87::-;9805:5;9826:2;9819:9;;9747:87;:::o;12372:205::-;12460:4;12473:80;12482:12;:10;:12::i;:::-;12496:7;12542:10;12505:11;:25;12517:12;:10;:12::i;:::-;12505:25;;;;;;;;;;;;;;;:34;12531:7;12505:34;;;;;;;;;;;;;;;;:47;;;;:::i;:::-;12473:8;:80::i;:::-;12567:4;12560:11;;12372:205;;;;:::o;30050:38::-;;;;;;;;;;;;;:::o;29630:::-;;;:::o;29936:33::-;;;;;;;;;;;;;:::o;31025:57::-;;;;;;;;;;;;;;;;;;;;;;:::o;37025:120::-;37091:4;37111:19;:28;37131:7;37111:28;;;;;;;;;;;;;;;;;;;;;;;;;37104:35;;37025:120;;;:::o;29795:25::-;;;;;;;;;;;;;:::o;44117:84::-;2072:12;:10;:12::i;:::-;2061:23;;:7;:5;:7::i;:::-;:23;;;2053:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44191:4:::1;44170:18;;:25;;;;;;;;;;;;;;;;;;44117:84::o:0;30324:28::-;;;;:::o;30012:31::-;;;;;;;;;;;;;:::o;10052:121::-;10126:7;10149:9;:18;10159:7;10149:18;;;;;;;;;;;;;;;;10142:25;;10052:121;;;:::o;2480:97::-;2072:12;:10;:12::i;:::-;2061:23;;:7;:5;:7::i;:::-;:23;;;2053:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2541:30:::1;2568:1;2541:18;:30::i;:::-;2480:97::o:0;33977:111::-;34029:4;2072:12;:10;:12::i;:::-;2061:23;;:7;:5;:7::i;:::-;:23;;;2053:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;34059:5:::1;34042:14;;:22;;;;;;;;;;;;;;;;;;34078:4;34071:11;;33977:111:::0;:::o;35080:147::-;2072:12;:10;:12::i;:::-;2061:23;;:7;:5;:7::i;:::-;:23;;;2053:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;35217:4:::1;35175:31;:39;35207:6;35175:39;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;35080:147:::0;;:::o;44788:92::-;2072:12;:10;:12::i;:::-;2061:23;;:7;:5;:7::i;:::-;:23;;;2053:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44869:5:::1;44848:11;:18;44860:5;44848:18;;;;;;;;;;;;;;;;:26;;;;;;;;;;;;;;;;;;44788:92:::0;:::o;29761:29::-;;;;;;;;;;;;;:::o;43887:180::-;2072:12;:10;:12::i;:::-;2061:23;;:7;:5;:7::i;:::-;:23;;;2053:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;43956:12:::1;43974:6;:11;;44003:21;43974:64;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43955:83;;;44053:7;44045:16;;;::::0;::::1;;43948:119;43887:180:::0;:::o;36868:151::-;2072:12;:10;:12::i;:::-;2061:23;;:7;:5;:7::i;:::-;:23;;;2053:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;36973:10:::1;;;;;;;;;;;36944:40;;36962:9;36944:40;;;;;;;;;;;;37004:9;36991:10;;:22;;;;;;;;;;;;;;;;;;36868:151:::0;:::o;35419:300::-;2072:12;:10;:12::i;:::-;2061:23;;:7;:5;:7::i;:::-;:23;;;2053:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;35568:12:::1;35551:14;:29;;;;35605:13;35587:15;:31;;;;35638:8;35625:10;:21;;;;35703:10;;35685:15;;35668:14;;:32;;;;:::i;:::-;:45;;;;:::i;:::-;35653:12;:60;;;;35419:300:::0;;;:::o;33795:134::-;2072:12;:10;:12::i;:::-;2061:23;;:7;:5;:7::i;:::-;:23;;;2053:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;33862:4:::1;33846:13;;:20;;;;;;;;;;;;;;;;;;33887:4;33873:11;;:18;;;;;;;;;;;;;;;;;;33918:5;33898:17;;:25;;;;;;;;;;;;;;;;;;33795:134::o:0;1857:81::-;1903:7;1926:6;;;;;;;;;;;1919:13;;1857:81;:::o;43362:239::-;2072:12;:10;:12::i;:::-;2061:23;;:7;:5;:7::i;:::-;:23;;;2053:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;43415:15:::1;43448:4;43433:31;;;43473:4;43433:46;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;43415:64;;43501:4;43486:30;;;43517:10;43529:7;43486:51;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;43552:10;43544:28;;:51;43573:21;43544:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;43408:193;43362:239::o:0;35319:94::-;2072:12;:10;:12::i;:::-;2061:23;;:7;:5;:7::i;:::-;:23;;;2053:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;35400:7:::1;35386:11;;:21;;;;;;;;;;;;;;;;;;35319:94:::0;:::o;9016:98::-;9072:13;9101:7;9094:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9016:98;:::o;36217:264::-;2072:12;:10;:12::i;:::-;2061:23;;:7;:5;:7::i;:::-;:23;;;2053:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;36337:13:::1;36329:21;;:4;:21;;::::0;36313:112:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;36434:41;36463:4;36469:5;36434:28;:41::i;:::-;36217:264:::0;;:::o;30292:25::-;;;;:::o;13074:385::-;13167:4;13180:24;13207:11;:25;13219:12;:10;:12::i;:::-;13207:25;;;;;;;;;;;;;;;:34;13233:7;13207:34;;;;;;;;;;;;;;;;13180:61;;13276:15;13256:16;:35;;13248:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;13359:67;13368:12;:10;:12::i;:::-;13382:7;13410:15;13391:16;:34;13359:8;:67::i;:::-;13449:4;13442:11;;;13074:385;;;;:::o;10380:165::-;10466:4;10479:42;10489:12;:10;:12::i;:::-;10503:9;10514:6;10479:9;:42::i;:::-;10535:4;10528:11;;10380:165;;;;:::o;44886:244::-;2072:12;:10;:12::i;:::-;2061:23;;:7;:5;:7::i;:::-;:23;;;2053:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45016:12:::1;44981:25;:32;45007:5;44981:32;;;;;;;;;;;;;;;;:47;;;;;;;;;;;;;;;;;;45035:36;45051:5;45058:12;45035:15;:36::i;:::-;45078:46;45104:5;45111:12;45078:25;:46::i;:::-;44886:244:::0;;:::o;36671:191::-;2072:12;:10;:12::i;:::-;2061:23;;:7;:5;:7::i;:::-;:23;;;2053:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;36800:14:::1;;;;;;;;;;;36759:56;;36781:17;36759:56;;;;;;;;;;;;36839:17;36822:14;;:34;;;;;;;;;;;;;;;;;;36671:191:::0;:::o;30920:57::-;;;;;;;;;;;;;;;;;;;;;;:::o;29974:33::-;;;;;;;;;;;;;:::o;43607:274::-;2072:12;:10;:12::i;:::-;2061:23;;:7;:5;:7::i;:::-;:23;;;2053:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;43716:1:::1;43698:20;;:6;:20;;::::0;43690:59:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;43756:24;43790:6;43783:24;;;43816:4;43783:39;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;43756:66;;43836:6;43829:23;;;43853:3;43858:16;43829:46;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;43683:198;43607:274:::0;;:::o;36039:172::-;2072:12;:10;:12::i;:::-;2061:23;;:7;:5;:7::i;:::-;:23;;;2053:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;36151:8:::1;36120:19;:28;36140:7;36120:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;36187:7;36171:34;;;36196:8;36171:34;;;;;;:::i;:::-;;;;;;;;36039:172:::0;;:::o;35725:308::-;2072:12;:10;:12::i;:::-;2061:23;;:7;:5;:7::i;:::-;:23;;;2053:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;35876:12:::1;35858:15;:30;;;;35914:13;35895:16;:32;;;;35948:8;35934:11;:22;;;;36016:11;;35997:16;;35979:15;;:34;;;;:::i;:::-;:48;;;;:::i;:::-;35963:13;:64;;;;35725:308:::0;;;:::o;34843:231::-;2072:12;:10;:12::i;:::-;2061:23;;:7;:5;:7::i;:::-;:23;;;2053:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;34974:4:::1;34966;34960:2;34944:13;:11;:13::i;:::-;:18;;;;:::i;:::-;34943:27;;;;:::i;:::-;34942:36;;;;:::i;:::-;34932:6;:46;;34916:116;;;;;;;;;;;;:::i;:::-;;;;;;;;;35061:6;35051;:17;;;;:::i;:::-;35039:9;:29;;;;34843:231:::0;:::o;29827:35::-;;;;:::o;34154:428::-;34244:4;2072:12;:10;:12::i;:::-;2061:23;;:7;:5;:7::i;:::-;:23;;;2053:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;34311:7:::1;34306:1;34290:13;:11;:13::i;:::-;:17;;;;:::i;:::-;34289:29;;;;:::i;:::-;34276:9;:42;;34260:129;;;;;;;;;;;;:::i;:::-;;;;;;;;;34447:4;34442:1;34426:13;:11;:13::i;:::-;:17;;;;:::i;:::-;34425:26;;;;:::i;:::-;34412:9;:39;;34396:125;;;;;;;;;;;;:::i;:::-;;;;;;;;;34549:9;34528:18;:30;;;;34572:4;34565:11;;34154:428:::0;;;:::o;30428:26::-;;;;:::o;30191:27::-;;;;:::o;10602:145::-;10691:7;10714:11;:18;10726:5;10714:18;;;;;;;;;;;;;;;:27;10733:7;10714:27;;;;;;;;;;;;;;;;10707:34;;10602:145;;;;:::o;29867:33::-;;;;:::o;30257:30::-;;;;:::o;2726:191::-;2072:12;:10;:12::i;:::-;2061:23;;:7;:5;:7::i;:::-;:23;;;2053:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2831:1:::1;2811:22;;:8;:22;;::::0;2803:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;2883:28;2902:8;2883:18;:28::i;:::-;2726:191:::0;:::o;30392:31::-;;;;:::o;29905:24::-;;;;:::o;44300:359::-;2072:12;:10;:12::i;:::-;2061:23;;:7;:5;:7::i;:::-;:23;;;2053:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44371:18:::1;;;;;;;;;;;44370:19;44362:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;44471:13;44450:35;;:9;:35;;;;:103;;;;;44510:42;44489:64;;:9;:64;;;;44450:103;44434:183;;;;;;;;;;;;:::i;:::-;;;;;;;;;44649:4;44624:11;:22;44636:9;44624:22;;;;;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;44300:359:::0;:::o;30536:28::-;;;;:::o;37151:107::-;37212:4;37232:11;:20;37244:7;37232:20;;;;;;;;;;;;;;;;;;;;;;;;;37225:27;;37151:107;;;:::o;760:92::-;813:7;836:10;829:17;;760:92;:::o;16576:348::-;16711:1;16694:19;;:5;:19;;;16686:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;16788:1;16769:21;;:7;:21;;;16761:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;16868:6;16838:11;:18;16850:5;16838:18;;;;;;;;;;;;;;;:27;16857:7;16838:27;;;;;;;;;;;;;;;:36;;;;16902:7;16886:32;;16895:5;16886:32;;;16911:6;16886:32;;;;;;:::i;:::-;;;;;;;;16576:348;;;:::o;37264:3471::-;37394:1;37378:18;;:4;:18;;;37370:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;37467:1;37453:16;;:2;:16;;;37445:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;37525:11;:17;37537:4;37525:17;;;;;;;;;;;;;;;;;;;;;;;;;37524:18;37516:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;37580:11;:15;37592:2;37580:15;;;;;;;;;;;;;;;;;;;;;;;;;37579:16;37571:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;37632:17;;;;;;;;;;;37628:125;;;37668:25;:31;37694:4;37668:31;;;;;;;;;;;;;;;;;;;;;;;;;37660:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;37628:125;37775:1;37765:6;:11;37761:77;;37787:28;37803:4;37809:2;37813:1;37787:15;:28::i;:::-;37824:7;;37761:77;37850:14;;;;;;;;;;;37846:1286;;;37897:7;:5;:7::i;:::-;37889:15;;:4;:15;;;;:41;;;;;37923:7;:5;:7::i;:::-;37917:13;;:2;:13;;;;37889:41;:70;;;;;37957:1;37943:16;;:2;:16;;;;37889:70;:104;;;;;37986:6;37972:21;;:2;:21;;;;37889:104;:126;;;;;38007:8;;;;;;;;;;;38006:9;37889:126;37875:1250;;;38041:13;;;;;;;;;;;38036:171;;38091:19;:25;38111:4;38091:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;38120:19;:23;38140:2;38120:23;;;;;;;;;;;;;;;;;;;;;;;;;38091:52;38069:126;;;;;;;;;;;;:::i;:::-;;;;;;;;;38036:171;38255:25;:31;38281:4;38255:31;;;;;;;;;;;;;;;;;;;;;;;;;:82;;;;;38302:31;:35;38334:2;38302:35;;;;;;;;;;;;;;;;;;;;;;;;;38301:36;38255:82;38239:877;;;38394:20;;38384:6;:30;;38362:135;;;;;;;;;;;;:::i;:::-;;;;;;;;;38558:9;;38541:13;38551:2;38541:9;:13::i;:::-;38532:6;:22;;;;:::i;:::-;:35;;38510:106;;;;;;;;;;;;:::i;:::-;;;;;;;;;38239:877;;;38682:25;:29;38708:2;38682:29;;;;;;;;;;;;;;;;;;;;;;;;;:82;;;;;38727:31;:37;38759:4;38727:37;;;;;;;;;;;;;;;;;;;;;;;;;38726:38;38682:82;38666:450;;;38821:20;;38811:6;:30;;38789:136;;;;;;;;;;;;:::i;:::-;;;;;;;;;38666:450;;;38948:31;:35;38980:2;38948:35;;;;;;;;;;;;;;;;;;;;;;;;;38943:173;;39046:9;;39029:13;39039:2;39029:9;:13::i;:::-;39020:6;:22;;;;:::i;:::-;:35;;38998:106;;;;;;;;;;;;:::i;:::-;;;;;;;;;38943:173;38666:450;38239:877;37875:1250;37846:1286;39140:28;39171:24;39189:4;39171:9;:24::i;:::-;39140:55;;39204:12;39243:18;;39219:20;:42;;39204:57;;39282:7;:29;;;;;39300:11;;;;;;;;;;;39282:29;:49;;;;;39323:8;;;;;;;;;;;39322:9;39282:49;:92;;;;;39343:25;:31;39369:4;39343:31;;;;;;;;;;;;;;;;;;;;;;;;;39342:32;39282:92;:129;;;;;39386:19;:25;39406:4;39386:25;;;;;;;;;;;;;;;;;;;;;;;;;39385:26;39282:129;:164;;;;;39423:19;:23;39443:2;39423:23;;;;;;;;;;;;;;;;;;;;;;;;;39422:24;39282:164;39270:264;;;39474:4;39463:8;;:15;;;;;;;;;;;;;;;;;;39489:10;:8;:10::i;:::-;39521:5;39510:8;;:16;;;;;;;;;;;;;;;;;;39270:264;39542:12;39558:8;;;;;;;;;;;39557:9;39542:24;;39660:19;:25;39680:4;39660:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;39689:19;:23;39709:2;39689:23;;;;;;;;;;;;;;;;;;;;;;;;;39660:52;39656:90;;;39733:5;39723:15;;39656:90;39754:12;39851:7;39847:841;;;39891:25;:29;39917:2;39891:29;;;;;;;;;;;;;;;;;;;;;;;;;:50;;;;;39940:1;39924:13;;:17;39891:50;39887:682;;;39961:34;39991:3;39961:25;39972:13;;39961:6;:10;;:25;;;;:::i;:::-;:29;;:34;;;;:::i;:::-;39954:41;;40056:13;;40036:16;;40029:4;:23;;;;:::i;:::-;40028:41;;;;:::i;:::-;40006:18;;:63;;;;;;;:::i;:::-;;;;;;;;40120:13;;40105:11;;40098:4;:18;;;;:::i;:::-;40097:36;;;;:::i;:::-;40080:13;;:53;;;;;;;:::i;:::-;;;;;;;;40192:13;;40173:15;;40166:4;:22;;;;:::i;:::-;40165:40;;;;:::i;:::-;40144:17;;:61;;;;;;;:::i;:::-;;;;;;;;39887:682;;;40251:25;:31;40277:4;40251:31;;;;;;;;;;;;;;;;;;;;;;;;;:51;;;;;40301:1;40286:12;;:16;40251:51;40247:322;;;40322:33;40351:3;40322:24;40333:12;;40322:6;:10;;:24;;;;:::i;:::-;:28;;:33;;;;:::i;:::-;40315:40;;40415:12;;40396:15;;40389:4;:22;;;;:::i;:::-;40388:39;;;;:::i;:::-;40366:18;;:61;;;;;;;:::i;:::-;;;;;;;;40477:12;;40463:10;;40456:4;:17;;;;:::i;:::-;40455:34;;;;:::i;:::-;40438:13;;:51;;;;;;;:::i;:::-;;;;;;;;40547:12;;40529:14;;40522:4;:21;;;;:::i;:::-;40521:38;;;;:::i;:::-;40500:17;;:59;;;;;;;:::i;:::-;;;;;;;;40247:322;39887:682;40590:1;40583:4;:8;40579:77;;;40604:42;40620:4;40634;40641;40604:15;:42::i;:::-;40579:77;40676:4;40666:14;;;;;:::i;:::-;;;39847:841;40696:33;40712:4;40718:2;40722:6;40696:15;:33::i;:::-;37363:3372;;;;37264:3471;;;;:::o;3071:177::-;3141:16;3160:6;;;;;;;;;;;3141:25;;3182:8;3173:6;;:17;;;;;;;;;;;;;;;;;;3233:8;3202:40;;3223:8;3202:40;;;;;;;;;;;;3134:114;3071:177;:::o;36487:178::-;36600:5;36566:25;:31;36592:4;36566:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;36653:5;36619:40;;36647:4;36619:40;;;;;;;;;;;;36487:178;;:::o;13943:671::-;14083:1;14065:20;;:6;:20;;;14057:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;14163:1;14142:23;;:9;:23;;;14134:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;14214:47;14235:6;14243:9;14254:6;14214:20;:47::i;:::-;14270:21;14294:9;:17;14304:6;14294:17;;;;;;;;;;;;;;;;14270:41;;14343:6;14326:13;:23;;14318:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;14454:6;14438:13;:22;14418:9;:17;14428:6;14418:17;;;;;;;;;;;;;;;:42;;;;14498:6;14474:9;:20;14484:9;14474:20;;;;;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;14535:9;14518:35;;14527:6;14518:35;;;14546:6;14518:35;;;;;;:::i;:::-;;;;;;;;14562:46;14582:6;14590:9;14601:6;14562:19;:46::i;:::-;14050:564;13943:671;;;:::o;41733:1623::-;41768:23;41794:24;41812:4;41794:9;:24::i;:::-;41768:50;;41825:25;41916:13;;41885:17;;41853:18;;:49;;;;:::i;:::-;:76;;;;:::i;:::-;41825:104;;41936:12;41980:1;41961:15;:20;:46;;;;42006:1;41985:17;:22;41961:46;41957:75;;;42018:7;;;;;41957:75;42083:2;42062:18;;:23;;;;:::i;:::-;42044:15;:41;42040:105;;;42135:2;42114:18;;:23;;;;:::i;:::-;42096:41;;42040:105;42198:23;42285:1;42265:17;42243:18;;42225:15;:36;;;;:::i;:::-;42224:58;;;;:::i;:::-;:62;;;;:::i;:::-;42198:88;;42293:26;42322:36;42342:15;42322;:19;;:36;;;;:::i;:::-;42293:65;;42367:25;42395:21;42367:49;;42425:36;42442:18;42425:16;:36::i;:::-;42470:18;42491:44;42517:17;42491:21;:25;;:44;;;;:::i;:::-;42470:65;;42544:22;42569:83;42649:1;42628:18;;:22;;;;:::i;:::-;42607:17;:44;;;;:::i;:::-;42569:33;42584:17;;42569:10;:14;;:33;;;;:::i;:::-;:37;;:83;;;;:::i;:::-;42544:108;;42661:18;42682:79;42758:1;42737:18;;:22;;;;:::i;:::-;42716:17;:44;;;;:::i;:::-;42682:29;42697:13;;42682:10;:14;;:29;;;;:::i;:::-;:33;;:79;;;;:::i;:::-;42661:100;;42770:23;42826:10;42809:14;42796:10;:27;;;;:::i;:::-;:40;;;;:::i;:::-;42770:66;;42866:1;42845:18;:22;;;;42894:1;42874:17;:21;;;;42918:1;42902:13;:17;;;;42945:1;42932:10;:14;42928:98;;;42979:10;;;;;;;;;;;42971:24;;43003:10;42971:47;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42957:61;;;;;42928:98;43056:1;43038:15;:19;:42;;;;;43079:1;43061:15;:19;43038:42;43034:232;;;43091:46;43104:15;43121;43091:12;:46::i;:::-;43151:107;43176:18;43205:15;43231:18;;43151:107;;;;;;;;:::i;:::-;;;;;;;;43034:232;43296:14;;;;;;;;;;;43288:28;;43324:21;43288:62;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43274:76;;;;;41761:1595;;;;;;;;;;41733:1623;:::o;21424:92::-;21482:7;21509:1;21505;:5;;;;:::i;:::-;21498:12;;21424:92;;;;:::o;21811:::-;21869:7;21896:1;21892;:5;;;;:::i;:::-;21885:12;;21811:92;;;;:::o;17518:111::-;;;;:::o;18227:110::-;;;;:::o;21079:92::-;21137:7;21164:1;21160;:5;;;;:::i;:::-;21153:12;;21079:92;;;;:::o;40741:525::-;40859:21;40897:1;40883:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40859:40;;40924:4;40906;40911:1;40906:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;40946:15;:20;;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;40936:4;40941:1;40936:7;;;;;;;;:::i;:::-;;;;;;;:32;;;;;;;;;;;40977:62;40994:4;41009:15;41027:11;40977:8;:62::i;:::-;41070:15;:66;;;41145:11;41165:1;41203:4;41224;41238:15;41070:190;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40796:470;40741:525;:::o;41272:455::-;41412:62;41429:4;41444:15;41462:11;41412:8;:62::i;:::-;41509:15;:31;;;41548:9;41575:4;41589:11;41609:1;41646;41683:7;:5;:7::i;:::-;41699:15;41509:212;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;41272:455;;:::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:147::-;13863:11;13900:3;13885:18;;13762:147;;;;:::o;13915:114::-;;:::o;14035:398::-;14194:3;14215:83;14296:1;14291:3;14215:83;:::i;:::-;14208:90;;14307:93;14396:3;14307:93;:::i;:::-;14425:1;14420:3;14416:11;14409:18;;14035:398;;;:::o;14439:379::-;14623:3;14645:147;14788:3;14645:147;:::i;:::-;14638:154;;14809:3;14802:10;;14439:379;;;:::o;14824:143::-;14881:5;14912:6;14906:13;14897:22;;14928:33;14955:5;14928:33;:::i;:::-;14824:143;;;;:::o;14973:351::-;15043:6;15092:2;15080:9;15071:7;15067:23;15063:32;15060:119;;;15098:79;;:::i;:::-;15060:119;15218:1;15243:64;15299:7;15290:6;15279:9;15275:22;15243:64;:::i;:::-;15233:74;;15189:128;14973:351;;;;:::o;15330:332::-;15451:4;15489:2;15478:9;15474:18;15466:26;;15502:71;15570:1;15559:9;15555:17;15546:6;15502:71;:::i;:::-;15583:72;15651:2;15640:9;15636:18;15627:6;15583:72;:::i;:::-;15330:332;;;;;:::o;15668:137::-;15722:5;15753:6;15747:13;15738:22;;15769:30;15793:5;15769:30;:::i;:::-;15668:137;;;;:::o;15811:345::-;15878:6;15927:2;15915:9;15906:7;15902:23;15898:32;15895:119;;;15933:79;;:::i;:::-;15895:119;16053:1;16078:61;16131:7;16122:6;16111:9;16107:22;16078:61;:::i;:::-;16068:71;;16024:125;15811:345;;;;:::o;16162:244::-;16302:34;16298:1;16290:6;16286:14;16279:58;16371:27;16366:2;16358:6;16354:15;16347:52;16162:244;:::o;16412:366::-;16554:3;16575:67;16639:2;16634:3;16575:67;:::i;:::-;16568:74;;16651:93;16740:3;16651:93;:::i;:::-;16769:2;16764:3;16760:12;16753:19;;16412:366;;;:::o;16784:419::-;16950:4;16988:2;16977:9;16973:18;16965:26;;17037:9;17031:4;17027:20;17023:1;17012:9;17008:17;17001:47;17065:131;17191:4;17065:131;:::i;:::-;17057:139;;16784:419;;;:::o;17209:224::-;17349:34;17345:1;17337:6;17333:14;17326:58;17418:7;17413:2;17405:6;17401:15;17394:32;17209:224;:::o;17439:366::-;17581:3;17602:67;17666:2;17661:3;17602:67;:::i;:::-;17595:74;;17678:93;17767:3;17678:93;:::i;:::-;17796:2;17791:3;17787:12;17780:19;;17439:366;;;:::o;17811:419::-;17977:4;18015:2;18004:9;18000:18;17992:26;;18064:9;18058:4;18054:20;18050:1;18039:9;18035:17;18028:47;18092:131;18218:4;18092:131;:::i;:::-;18084:139;;17811:419;;;:::o;18236:176::-;18376:28;18372:1;18364:6;18360:14;18353:52;18236:176;:::o;18418:366::-;18560:3;18581:67;18645:2;18640:3;18581:67;:::i;:::-;18574:74;;18657:93;18746:3;18657:93;:::i;:::-;18775:2;18770:3;18766:12;18759:19;;18418:366;;;:::o;18790:419::-;18956:4;18994:2;18983:9;18979:18;18971:26;;19043:9;19037:4;19033:20;19029:1;19018:9;19014:17;19007:47;19071:131;19197:4;19071:131;:::i;:::-;19063:139;;18790:419;;;:::o;19215:223::-;19355:34;19351:1;19343:6;19339:14;19332:58;19424:6;19419:2;19411:6;19407:15;19400:31;19215:223;:::o;19444:366::-;19586:3;19607:67;19671:2;19666:3;19607:67;:::i;:::-;19600:74;;19683:93;19772:3;19683:93;:::i;:::-;19801:2;19796:3;19792:12;19785:19;;19444:366;;;:::o;19816:419::-;19982:4;20020:2;20009:9;20005:18;19997:26;;20069:9;20063:4;20059:20;20055:1;20044:9;20040:17;20033:47;20097:131;20223:4;20097:131;:::i;:::-;20089:139;;19816:419;;;:::o;20241:240::-;20381:34;20377:1;20369:6;20365:14;20358:58;20450:23;20445:2;20437:6;20433:15;20426:48;20241:240;:::o;20487:366::-;20629:3;20650:67;20714:2;20709:3;20650:67;:::i;:::-;20643:74;;20726:93;20815:3;20726:93;:::i;:::-;20844:2;20839:3;20835:12;20828:19;;20487:366;;;:::o;20859:419::-;21025:4;21063:2;21052:9;21048:18;21040:26;;21112:9;21106:4;21102:20;21098:1;21087:9;21083:17;21076:47;21140:131;21266:4;21140:131;:::i;:::-;21132:139;;20859:419;;;:::o;21284:239::-;21424:34;21420:1;21412:6;21408:14;21401:58;21493:22;21488:2;21480:6;21476:15;21469:47;21284:239;:::o;21529:366::-;21671:3;21692:67;21756:2;21751:3;21692:67;:::i;:::-;21685:74;;21768:93;21857:3;21768:93;:::i;:::-;21886:2;21881:3;21877:12;21870:19;;21529:366;;;:::o;21901:419::-;22067:4;22105:2;22094:9;22090:18;22082:26;;22154:9;22148:4;22144:20;22140:1;22129:9;22125:17;22118:47;22182:131;22308:4;22182:131;:::i;:::-;22174:139;;21901:419;;;:::o;22326:225::-;22466:34;22462:1;22454:6;22450:14;22443:58;22535:8;22530:2;22522:6;22518:15;22511:33;22326:225;:::o;22557:366::-;22699:3;22720:67;22784:2;22779:3;22720:67;:::i;:::-;22713:74;;22796:93;22885:3;22796:93;:::i;:::-;22914:2;22909:3;22905:12;22898:19;;22557:366;;;:::o;22929:419::-;23095:4;23133:2;23122:9;23118:18;23110:26;;23182:9;23176:4;23172:20;23168:1;23157:9;23153:17;23146:47;23210:131;23336:4;23210:131;:::i;:::-;23202:139;;22929:419;;;:::o;23354:220::-;23494:34;23490:1;23482:6;23478:14;23471:58;23563:3;23558:2;23550:6;23546:15;23539:28;23354:220;:::o;23580:366::-;23722:3;23743:67;23807:2;23802:3;23743:67;:::i;:::-;23736:74;;23819:93;23908:3;23819:93;:::i;:::-;23937:2;23932:3;23928:12;23921:19;;23580:366;;;:::o;23952:419::-;24118:4;24156:2;24145:9;24141:18;24133:26;;24205:9;24199:4;24195:20;24191:1;24180:9;24176:17;24169:47;24233:131;24359:4;24233:131;:::i;:::-;24225:139;;23952:419;;;:::o;24377:233::-;24517:34;24513:1;24505:6;24501:14;24494:58;24586:16;24581:2;24573:6;24569:15;24562:41;24377:233;:::o;24616:366::-;24758:3;24779:67;24843:2;24838:3;24779:67;:::i;:::-;24772:74;;24855:93;24944:3;24855:93;:::i;:::-;24973:2;24968:3;24964:12;24957:19;;24616:366;;;:::o;24988:419::-;25154:4;25192:2;25181:9;25177:18;25169:26;;25241:9;25235:4;25231:20;25227:1;25216:9;25212:17;25205:47;25269:131;25395:4;25269:131;:::i;:::-;25261:139;;24988:419;;;:::o;25413:223::-;25553:34;25549:1;25541:6;25537:14;25530:58;25622:6;25617:2;25609:6;25605:15;25598:31;25413:223;:::o;25642:366::-;25784:3;25805:67;25869:2;25864:3;25805:67;:::i;:::-;25798:74;;25881:93;25970:3;25881:93;:::i;:::-;25999:2;25994:3;25990:12;25983:19;;25642:366;;;:::o;26014:419::-;26180:4;26218:2;26207:9;26203:18;26195:26;;26267:9;26261:4;26257:20;26253:1;26242:9;26238:17;26231:47;26295:131;26421:4;26295:131;:::i;:::-;26287:139;;26014:419;;;:::o;26439:221::-;26579:34;26575:1;26567:6;26563:14;26556:58;26648:4;26643:2;26635:6;26631:15;26624:29;26439:221;:::o;26666:366::-;26808:3;26829:67;26893:2;26888:3;26829:67;:::i;:::-;26822:74;;26905:93;26994:3;26905:93;:::i;:::-;27023:2;27018:3;27014:12;27007:19;;26666:366;;;:::o;27038:419::-;27204:4;27242:2;27231:9;27227:18;27219:26;;27291:9;27285:4;27281:20;27277:1;27266:9;27262:17;27255:47;27319:131;27445:4;27319:131;:::i;:::-;27311:139;;27038:419;;;:::o;27463:224::-;27603:34;27599:1;27591:6;27587:14;27580:58;27672:7;27667:2;27659:6;27655:15;27648:32;27463:224;:::o;27693:366::-;27835:3;27856:67;27920:2;27915:3;27856:67;:::i;:::-;27849:74;;27932:93;28021:3;27932:93;:::i;:::-;28050:2;28045:3;28041:12;28034:19;;27693:366;;;:::o;28065:419::-;28231:4;28269:2;28258:9;28254:18;28246:26;;28318:9;28312:4;28308:20;28304:1;28293:9;28289:17;28282:47;28346:131;28472:4;28346:131;:::i;:::-;28338:139;;28065:419;;;:::o;28490:222::-;28630:34;28626:1;28618:6;28614:14;28607:58;28699:5;28694:2;28686:6;28682:15;28675:30;28490:222;:::o;28718:366::-;28860:3;28881:67;28945:2;28940:3;28881:67;:::i;:::-;28874:74;;28957:93;29046:3;28957:93;:::i;:::-;29075:2;29070:3;29066:12;29059:19;;28718:366;;;:::o;29090:419::-;29256:4;29294:2;29283:9;29279:18;29271:26;;29343:9;29337:4;29333:20;29329:1;29318:9;29314:17;29307:47;29371:131;29497:4;29371:131;:::i;:::-;29363:139;;29090:419;;;:::o;29515:168::-;29655:20;29651:1;29643:6;29639:14;29632:44;29515:168;:::o;29689:366::-;29831:3;29852:67;29916:2;29911:3;29852:67;:::i;:::-;29845:74;;29928:93;30017:3;29928:93;:::i;:::-;30046:2;30041:3;30037:12;30030:19;;29689:366;;;:::o;30061:419::-;30227:4;30265:2;30254:9;30250:18;30242:26;;30314:9;30308:4;30304:20;30300:1;30289:9;30285:17;30278:47;30342:131;30468:4;30342:131;:::i;:::-;30334:139;;30061:419;;;:::o;30486:170::-;30626:22;30622:1;30614:6;30610:14;30603:46;30486:170;:::o;30662:366::-;30804:3;30825:67;30889:2;30884:3;30825:67;:::i;:::-;30818:74;;30901:93;30990:3;30901:93;:::i;:::-;31019:2;31014:3;31010:12;31003:19;;30662:366;;;:::o;31034:419::-;31200:4;31238:2;31227:9;31223:18;31215:26;;31287:9;31281:4;31277:20;31273:1;31262:9;31258:17;31251:47;31315:131;31441:4;31315:131;:::i;:::-;31307:139;;31034:419;;;:::o;31459:228::-;31599:34;31595:1;31587:6;31583:14;31576:58;31668:11;31663:2;31655:6;31651:15;31644:36;31459:228;:::o;31693:366::-;31835:3;31856:67;31920:2;31915:3;31856:67;:::i;:::-;31849:74;;31932:93;32021:3;31932:93;:::i;:::-;32050:2;32045:3;32041:12;32034:19;;31693:366;;;:::o;32065:419::-;32231:4;32269:2;32258:9;32254:18;32246:26;;32318:9;32312:4;32308:20;32304:1;32293:9;32289:17;32282:47;32346:131;32472:4;32346:131;:::i;:::-;32338:139;;32065:419;;;:::o;32490:172::-;32630:24;32626:1;32618:6;32614:14;32607:48;32490:172;:::o;32668:366::-;32810:3;32831:67;32895:2;32890:3;32831:67;:::i;:::-;32824:74;;32907:93;32996:3;32907:93;:::i;:::-;33025:2;33020:3;33016:12;33009:19;;32668:366;;;:::o;33040:419::-;33206:4;33244:2;33233:9;33229:18;33221:26;;33293:9;33287:4;33283:20;33279:1;33268:9;33264:17;33257:47;33321:131;33447:4;33321:131;:::i;:::-;33313:139;;33040:419;;;:::o;33465:240::-;33605:34;33601:1;33593:6;33589:14;33582:58;33674:23;33669:2;33661:6;33657:15;33650:48;33465:240;:::o;33711:366::-;33853:3;33874:67;33938:2;33933:3;33874:67;:::i;:::-;33867:74;;33950:93;34039:3;33950:93;:::i;:::-;34068:2;34063:3;34059:12;34052:19;;33711:366;;;:::o;34083:419::-;34249:4;34287:2;34276:9;34272:18;34264:26;;34336:9;34330:4;34326:20;34322:1;34311:9;34307:17;34300:47;34364:131;34490:4;34364:131;:::i;:::-;34356:139;;34083:419;;;:::o;34508:169::-;34648:21;34644:1;34636:6;34632:14;34625:45;34508:169;:::o;34683:366::-;34825:3;34846:67;34910:2;34905:3;34846:67;:::i;:::-;34839:74;;34922:93;35011:3;34922:93;:::i;:::-;35040:2;35035:3;35031:12;35024:19;;34683:366;;;:::o;35055:419::-;35221:4;35259:2;35248:9;35244:18;35236:26;;35308:9;35302:4;35298:20;35294:1;35283:9;35279:17;35272:47;35336:131;35462:4;35336:131;:::i;:::-;35328:139;;35055:419;;;:::o;35480:241::-;35620:34;35616:1;35608:6;35604:14;35597:58;35689:24;35684:2;35676:6;35672:15;35665:49;35480:241;:::o;35727:366::-;35869:3;35890:67;35954:2;35949:3;35890:67;:::i;:::-;35883:74;;35966:93;36055:3;35966:93;:::i;:::-;36084:2;36079:3;36075:12;36068:19;;35727:366;;;:::o;36099:419::-;36265:4;36303:2;36292:9;36288:18;36280:26;;36352:9;36346:4;36342:20;36338:1;36327:9;36323:17;36316:47;36380:131;36506:4;36380:131;:::i;:::-;36372:139;;36099:419;;;:::o;36524:194::-;36564:4;36584:20;36602:1;36584:20;:::i;:::-;36579:25;;36618:20;36636:1;36618:20;:::i;:::-;36613:25;;36662:1;36659;36655:9;36647:17;;36686:1;36680:4;36677:11;36674:37;;;36691:18;;:::i;:::-;36674:37;36524:194;;;;:::o;36724:225::-;36864:34;36860:1;36852:6;36848:14;36841:58;36933:8;36928:2;36920:6;36916:15;36909:33;36724:225;:::o;36955:366::-;37097:3;37118:67;37182:2;37177:3;37118:67;:::i;:::-;37111:74;;37194:93;37283:3;37194:93;:::i;:::-;37312:2;37307:3;37303:12;37296:19;;36955:366;;;:::o;37327:419::-;37493:4;37531:2;37520:9;37516:18;37508:26;;37580:9;37574:4;37570:20;37566:1;37555:9;37551:17;37544:47;37608:131;37734:4;37608:131;:::i;:::-;37600:139;;37327:419;;;:::o;37752:442::-;37901:4;37939:2;37928:9;37924:18;37916:26;;37952:71;38020:1;38009:9;38005:17;37996:6;37952:71;:::i;:::-;38033:72;38101:2;38090:9;38086:18;38077:6;38033:72;:::i;:::-;38115;38183:2;38172:9;38168:18;38159:6;38115:72;:::i;:::-;37752:442;;;;;;:::o;38200:180::-;38248:77;38245:1;38238:88;38345:4;38342:1;38335:15;38369:4;38366:1;38359:15;38386:180;38434:77;38431:1;38424:88;38531:4;38528:1;38521:15;38555:4;38552:1;38545:15;38572:143;38629:5;38660:6;38654:13;38645:22;;38676:33;38703:5;38676:33;:::i;:::-;38572:143;;;;:::o;38721:351::-;38791:6;38840:2;38828:9;38819:7;38815:23;38811:32;38808:119;;;38846:79;;:::i;:::-;38808:119;38966:1;38991:64;39047:7;39038:6;39027:9;39023:22;38991:64;:::i;:::-;38981:74;;38937:128;38721:351;;;;:::o;39078:85::-;39123:7;39152:5;39141:16;;39078:85;;;:::o;39169:158::-;39227:9;39260:61;39278:42;39287:32;39313:5;39287:32;:::i;:::-;39278:42;:::i;:::-;39260:61;:::i;:::-;39247:74;;39169:158;;;:::o;39333:147::-;39428:45;39467:5;39428:45;:::i;:::-;39423:3;39416:58;39333:147;;:::o;39486:114::-;39553:6;39587:5;39581:12;39571:22;;39486:114;;;:::o;39606:184::-;39705:11;39739:6;39734:3;39727:19;39779:4;39774:3;39770:14;39755:29;;39606:184;;;;:::o;39796:132::-;39863:4;39886:3;39878:11;;39916:4;39911:3;39907:14;39899:22;;39796:132;;;:::o;39934:108::-;40011:24;40029:5;40011:24;:::i;:::-;40006:3;39999:37;39934:108;;:::o;40048:179::-;40117:10;40138:46;40180:3;40172:6;40138:46;:::i;:::-;40216:4;40211:3;40207:14;40193:28;;40048:179;;;;:::o;40233:113::-;40303:4;40335;40330:3;40326:14;40318:22;;40233:113;;;:::o;40382:732::-;40501:3;40530:54;40578:5;40530:54;:::i;:::-;40600:86;40679:6;40674:3;40600:86;:::i;:::-;40593:93;;40710:56;40760:5;40710:56;:::i;:::-;40789:7;40820:1;40805:284;40830:6;40827:1;40824:13;40805:284;;;40906:6;40900:13;40933:63;40992:3;40977:13;40933:63;:::i;:::-;40926:70;;41019:60;41072:6;41019:60;:::i;:::-;41009:70;;40865:224;40852:1;40849;40845:9;40840:14;;40805:284;;;40809:14;41105:3;41098:10;;40506:608;;;40382:732;;;;:::o;41120:831::-;41383:4;41421:3;41410:9;41406:19;41398:27;;41435:71;41503:1;41492:9;41488:17;41479:6;41435:71;:::i;:::-;41516:80;41592:2;41581:9;41577:18;41568:6;41516:80;:::i;:::-;41643:9;41637:4;41633:20;41628:2;41617:9;41613:18;41606:48;41671:108;41774:4;41765:6;41671:108;:::i;:::-;41663:116;;41789:72;41857:2;41846:9;41842:18;41833:6;41789:72;:::i;:::-;41871:73;41939:3;41928:9;41924:19;41915:6;41871:73;:::i;:::-;41120:831;;;;;;;;:::o;41957:807::-;42206:4;42244:3;42233:9;42229:19;42221:27;;42258:71;42326:1;42315:9;42311:17;42302:6;42258:71;:::i;:::-;42339:72;42407:2;42396:9;42392:18;42383:6;42339:72;:::i;:::-;42421:80;42497:2;42486:9;42482:18;42473:6;42421:80;:::i;:::-;42511;42587:2;42576:9;42572:18;42563:6;42511:80;:::i;:::-;42601:73;42669:3;42658:9;42654:19;42645:6;42601:73;:::i;:::-;42684;42752:3;42741:9;42737:19;42728:6;42684:73;:::i;:::-;41957:807;;;;;;;;;:::o;42770:663::-;42858:6;42866;42874;42923:2;42911:9;42902:7;42898:23;42894:32;42891:119;;;42929:79;;:::i;:::-;42891:119;43049:1;43074:64;43130:7;43121:6;43110:9;43106:22;43074:64;:::i;:::-;43064:74;;43020:128;43187:2;43213:64;43269:7;43260:6;43249:9;43245:22;43213:64;:::i;:::-;43203:74;;43158:129;43326:2;43352:64;43408:7;43399:6;43388:9;43384:22;43352:64;:::i;:::-;43342:74;;43297:129;42770:663;;;;;:::o

Swarm Source

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