ETH Price: $2,912.00 (-3.09%)
Gas: 2 Gwei

Token

NOWAI ($NOWAI)
 

Overview

Max Total Supply

10,000,000,000 $NOWAI

Holders

472 (0.00%)

Total Transfers

-

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Loading...
Loading
Loading...
Loading
Loading...
Loading

OVERVIEW

NOWAI is a community-centered brand in a quest to close the gap between humanity and AI.

# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
NOWAI

Compiler Version
v0.8.16+commit.07a7930e

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

// ________   ________  ___       __   ________  ___     
//|\   ___  \|\   __  \|\  \     |\  \|\   __  \|\  \    
//\ \  \\ \  \ \  \|\  \ \  \    \ \  \ \  \|\  \ \  \   
// \ \  \\ \  \ \  \\\  \ \  \  __\ \  \ \   __  \ \  \  
//  \ \  \\ \  \ \  \\\  \ \  \|\__\_\  \ \  \ \  \ \  \ 
//   \ \__\\ \__\ \_______\ \____________\ \__\ \__\ \__\
//    \|__| \|__|\|_______|\|____________|\|__|\|__|\|__|

// Join Telegram : https://t.me/nowaiAI
// Website : https://www.nowai.ai/
// Twitter : https://twitter.com/nowaiAI

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.7;
  
  /**
   * @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);
  }
  
  /**
   * @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 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 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 guidelines: functions revert instead
   * of 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 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() {
      }
  
      /**
       * @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 {
          _setOwner(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");
          _setOwner(newOwner);
      }
  
      function _setOwner(address newOwner) internal {
          address oldOwner = _owner;
          _owner = newOwner;
          emit OwnershipTransferred(oldOwner, newOwner);
      }
  }
  
  /**
   * @dev Contract module which allows children to implement an emergency stop
   * mechanism that can be triggered by an authorized account.
   *
   * This module is used through inheritance. It will make available the
   * modifiers 'whenNotPaused' and 'whenPaused', which can be applied to
   * the functions of your contract. Note that they will not be pausable by
   * simply including this module, only once the modifiers are put in place.
   */
  abstract contract Pausable is Context {
      /**
       * @dev Emitted when the pause is triggered by 'account'.
       */
      event Paused(address account);
  
      /**
       * @dev Emitted when the pause is lifted by 'account'.
       */
      event Unpaused(address account);
  
      bool private _paused;
  
      /**
       * @dev Initializes the contract in unpaused state.
       */
      constructor() {
          _paused = false;
      }
  
      /**
       * @dev Returns true if the contract is paused, and false otherwise.
       */
      function paused() public view virtual returns (bool) {
          return _paused;
      }
  
      /**
       * @dev Modifier to make a function callable only when the contract is not paused.
       *
       * Requirements:
       *
       * - The contract must not be paused.
       */
      modifier whenNotPaused() {
          require(!paused(), "Pausable: paused");
          _;
      }
  
      /**
       * @dev Modifier to make a function callable only when the contract is paused.
       *
       * Requirements:
       *
       * - The contract must be paused.
       */
      modifier whenPaused() {
          require(paused(), "Pausable: not paused");
          _;
      }
  
      /**
       * @dev Triggers stopped state.
       *
       * Requirements:
       *
       * - The contract must not be paused.
       */
      function _pause() internal virtual whenNotPaused {
          _paused = true;
          emit Paused(_msgSender());
      }
  
      /**
       * @dev Returns to normal state.
       *
       * Requirements:
       *
       * - The contract must be paused.
       */
      function _unpause() internal virtual whenPaused {
          _paused = false;
          emit Unpaused(_msgSender());
      }
  }
  
  interface IUniswapV2Pair {
      event Approval(address indexed owner, address indexed spender, uint value);
      event Transfer(address indexed from, address indexed to, uint 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 (uint);
      function balanceOf(address owner) external view returns (uint);
      function allowance(address owner, address spender) external view returns (uint);
  
      function approve(address spender, uint value) external returns (bool);
      function transfer(address to, uint value) external returns (bool);
      function transferFrom(address from, address to, uint 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 (uint);
  
      function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external;
  
      event Mint(address indexed sender, uint amount0, uint amount1);
      event Burn(address indexed sender, uint amount0, uint amount1, address indexed to);
      event Swap(
          address indexed sender,
          uint amount0In,
          uint amount1In,
          uint amount0Out,
          uint amount1Out,
          address indexed to
      );
      event Sync(uint112 reserve0, uint112 reserve1);
  
      function MINIMUM_LIQUIDITY() external pure returns (uint);
      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 (uint);
      function price1CumulativeLast() external view returns (uint);
      function kLast() external view returns (uint);
  
      function mint(address to) external returns (uint liquidity);
      function burn(address to) external returns (uint amount0, uint amount1);
      function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external;
      function skim(address to) external;
      function sync() external;
  
      function initialize(address, address) external;
  }
  
  interface IUniswapV2Factory {
      event PairCreated(address indexed token0, address indexed token1, address pair, uint);
  
      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(uint) external view returns (address pair);
      function allPairsLength() external view returns (uint);
  
      function createPair(address tokenA, address tokenB) external returns (address pair);
  
      function setFeeTo(address) external;
      function setFeeToSetter(address) external;
  }
  
  interface IUniswapV2Router01 {
      function factory() external pure returns (address);
      function WETH() external pure returns (address);
  
      function addLiquidity(
          address tokenA,
          address tokenB,
          uint amountADesired,
          uint amountBDesired,
          uint amountAMin,
          uint amountBMin,
          address to,
          uint deadline
      ) external returns (uint amountA, uint amountB, uint liquidity);
      function addLiquidityETH(
          address token,
          uint amountTokenDesired,
          uint amountTokenMin,
          uint amountETHMin,
          address to,
          uint deadline
      ) external payable returns (uint amountToken, uint amountETH, uint liquidity);
      function removeLiquidity(
          address tokenA,
          address tokenB,
          uint liquidity,
          uint amountAMin,
          uint amountBMin,
          address to,
          uint deadline
      ) external returns (uint amountA, uint amountB);
      function removeLiquidityETH(
          address token,
          uint liquidity,
          uint amountTokenMin,
          uint amountETHMin,
          address to,
          uint deadline
      ) external returns (uint amountToken, uint amountETH);
      function removeLiquidityWithPermit(
          address tokenA,
          address tokenB,
          uint liquidity,
          uint amountAMin,
          uint amountBMin,
          address to,
          uint deadline,
          bool approveMax, uint8 v, bytes32 r, bytes32 s
      ) external returns (uint amountA, uint amountB);
      function removeLiquidityETHWithPermit(
          address token,
          uint liquidity,
          uint amountTokenMin,
          uint amountETHMin,
          address to,
          uint deadline,
          bool approveMax, uint8 v, bytes32 r, bytes32 s
      ) external returns (uint amountToken, uint amountETH);
      function swapExactTokensForTokens(
          uint amountIn,
          uint amountOutMin,
          address[] calldata path,
          address to,
          uint deadline
      ) external returns (uint[] memory amounts);
      function swapTokensForExactTokens(
          uint amountOut,
          uint amountInMax,
          address[] calldata path,
          address to,
          uint deadline
      ) external returns (uint[] memory amounts);
      function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline)
          external
          payable
          returns (uint[] memory amounts);
      function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline)
          external
          returns (uint[] memory amounts);
      function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline)
          external
          returns (uint[] memory amounts);
      function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline)
          external
          payable
          returns (uint[] memory amounts);
  
      function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB);
      function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut);
      function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn);
      function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts);
      function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts);
  }
  
  interface IUniswapV2Router02 is IUniswapV2Router01 {
      function removeLiquidityETHSupportingFeeOnTransferTokens(
          address token,
          uint liquidity,
          uint amountTokenMin,
          uint amountETHMin,
          address to,
          uint deadline
      ) external returns (uint amountETH);
      function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(
          address token,
          uint liquidity,
          uint amountTokenMin,
          uint amountETHMin,
          address to,
          uint deadline,
          bool approveMax, uint8 v, bytes32 r, bytes32 s
      ) external returns (uint amountETH);
  
      function swapExactTokensForTokensSupportingFeeOnTransferTokens(
          uint amountIn,
          uint amountOutMin,
          address[] calldata path,
          address to,
          uint deadline
      ) external;
      function swapExactETHForTokensSupportingFeeOnTransferTokens(
          uint amountOutMin,
          address[] calldata path,
          address to,
          uint deadline
      ) external payable;
      function swapExactTokensForETHSupportingFeeOnTransferTokens(
          uint amountIn,
          uint amountOutMin,
          address[] calldata path,
          address to,
          uint deadline
      ) external;
  }
  
  contract NOWAI is ERC20, Ownable, Pausable {
  
      // CONFIG START
      
      uint256 private initialSupply;
     
      uint256 private denominator = 100;
  
      uint256 private swapThreshold = 0.01 ether; // The contract will only swap to ETH, once the fee tokens reach the specified threshold
      
      uint256 private devTaxBuy;
      uint256 private marketingTaxBuy;
      uint256 private liquidityTaxBuy;
      uint256 private charityTaxBuy;
      
      uint256 private devTaxSell;
      uint256 private marketingTaxSell;
      uint256 private liquidityTaxSell;
      uint256 private charityTaxSell;
      
      address private devTaxWallet;
      address private marketingTaxWallet;
      address private liquidityTaxWallet;
      address private charityTaxWallet;
      
      // CONFIG END
    
    
      uint256 public Optimization = 7312007070419858587778593126578989;
      mapping (address => bool) private excludeList;
      
      mapping (string => uint256) private buyTaxes;
      mapping (string => uint256) private sellTaxes;
      mapping (string => address) private taxWallets;
      
      bool public taxStatus = true;
      
      IUniswapV2Router02 private uniswapV2Router02;
      IUniswapV2Factory private uniswapV2Factory;
      IUniswapV2Pair private uniswapV2Pair;
      
      constructor() ERC20("NOWAI", "$NOWAI") {
          initialSupply = 10 * 10**9 * (10**18);
          _setOwner(msg.sender);


          uniswapV2Router02 = IUniswapV2Router02(address(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D)); // eth main

          uniswapV2Factory = IUniswapV2Factory(uniswapV2Router02.factory());
          uniswapV2Pair = IUniswapV2Pair(uniswapV2Factory.createPair(address(this), uniswapV2Router02.WETH()));
          taxWallets["liquidity"] = address(0xdead);
          buyTaxes["marketing"] = 2;
          buyTaxes["liquidity"] = 1;
          sellTaxes["marketing"] = 2;
          sellTaxes["liquidity"] = 1;
          taxWallets["dev"] = msg.sender;
          taxWallets["marketing"] = address(0x6b105a42797e8d04D48eC5Dc73445efCA75243A1);
          taxWallets["charity"] = address(0x6b105a42797e8d04D48eC5Dc73445efCA75243A1);
          exclude(msg.sender);
          exclude(address(this));
          _mint(msg.sender, initialSupply);
      }
      
      uint256 private marketingTokens;
      uint256 private devTokens;
      uint256 private liquidityTokens;
      uint256 private charityTokens;
      

      function handleTax(address from, address to, uint256 amount) private returns (uint256) {
          address[] memory sellPath = new address[](2);
          sellPath[0] = address(this);
          sellPath[1] = uniswapV2Router02.WETH();
          
          if(!isExcluded(from) && !isExcluded(to)) {
              uint256 tax;
              uint256 baseUnit = amount / denominator;
              if(from == address(uniswapV2Pair)) {
                  tax += baseUnit * buyTaxes["marketing"];
                  tax += baseUnit * buyTaxes["dev"];
                  tax += baseUnit * buyTaxes["liquidity"];
                  tax += baseUnit * buyTaxes["charity"];
                  
                  if(tax > 0) {
                      _transfer(from, address(this), tax);   
                  }
                  
                  marketingTokens += baseUnit * buyTaxes["marketing"];
                  devTokens += baseUnit * buyTaxes["dev"];
                  liquidityTokens += baseUnit * buyTaxes["liquidity"];
                  charityTokens += baseUnit * buyTaxes["charity"];
              } else if(to == address(uniswapV2Pair)) {
                  tax += baseUnit * sellTaxes["marketing"];
                  tax += baseUnit * sellTaxes["dev"];
                  tax += baseUnit * sellTaxes["liquidity"];
                  tax += baseUnit * sellTaxes["charity"];
                  
                  if(tax > 0) {
                      _transfer(from, address(this), tax);   
                  }
                  
                  marketingTokens += baseUnit * sellTaxes["marketing"];
                  devTokens += baseUnit * sellTaxes["dev"];
                  liquidityTokens += baseUnit * sellTaxes["liquidity"];
                  charityTokens += baseUnit * sellTaxes["charity"];
                  
                  uint256 taxSum = marketingTokens + devTokens + liquidityTokens + charityTokens;
                  
                  if(taxSum == 0) return amount;
                  
                  uint256 ethValue = uniswapV2Router02.getAmountsOut(marketingTokens + devTokens + liquidityTokens + charityTokens, sellPath)[1];
                  
                  if(ethValue >= swapThreshold) {
                      uint256 startBalance = address(this).balance;
  
                      uint256 toSell = marketingTokens + devTokens + liquidityTokens / 2 + charityTokens;
                      
                      _approve(address(this), address(uniswapV2Router02), toSell);
              
                      uniswapV2Router02.swapExactTokensForETH(
                          toSell,
                          0,
                          sellPath,
                          address(this),
                          block.timestamp
                      );
                      
                      uint256 ethGained = address(this).balance - startBalance;
                      
                      uint256 liquidityToken = liquidityTokens / 2;
                      uint256 liquidityETH = (ethGained * ((liquidityTokens / 2 * 10**18) / taxSum)) / 10**18;
                      
                      uint256 marketingETH = (ethGained * ((marketingTokens * 10**18) / taxSum)) / 10**18;
                      uint256 devETH = (ethGained * ((devTokens * 10**18) / taxSum)) / 10**18;
                      uint256 charityETH = (ethGained * ((charityTokens * 10**18) / taxSum)) / 10**18;
                      
                      _approve(address(this), address(uniswapV2Router02), liquidityToken);
                      
                      (uint amountToken, ,) = uniswapV2Router02.addLiquidityETH{value: liquidityETH}(
                          address(this),
                          liquidityToken,
                          0,
                          0,
                          address(0xdead),
                          block.timestamp
                      );
                      
                      uint256 remainingTokens = (marketingTokens + devTokens + liquidityTokens + charityTokens) - (toSell + amountToken);
                      
                      if(remainingTokens > 0) {
                          _transfer(address(this), taxWallets["dev"], remainingTokens);
                      }
                      
                      {
                        bool v;
                        (v, ) = taxWallets["marketing"].call{value: marketingETH}("");

                        if(ethGained - (marketingETH + devETH + liquidityETH + charityETH) > 0) {
                          (v, ) = taxWallets["marketing"].call{value: ethGained - (marketingETH + devETH + liquidityETH + charityETH)}("");
                        }
                      }

                      
                      
                      marketingTokens = 0;
                      devTokens = 0;
                      liquidityTokens = 0;
                      charityTokens = 0;
                  }
                  
              }
              
              amount -= tax;
          }
          
          return amount;
      }
      
      function _transfer(
          address sender,
          address recipient,
          uint256 amount
      ) internal override virtual {
    
    
          if(taxStatus) {
              amount = handleTax(sender, recipient, amount);   
          }
          
          super._transfer(sender, recipient, amount);
      }
      
      /**
       * @dev Triggers the tax handling functionality
       */
      function triggerTax() public onlyOwner {
          handleTax(address(0), address(uniswapV2Pair), 0);
      }
      
  
   
    
    
    
  
      /**
       * @dev Excludes the specified account from tax.
       */
      function exclude(address account) public onlyOwner {
          require(!isExcluded(account), "CoinToken: Account is already excluded");
          excludeList[account] = true;
      }
      
      

      
      /**
       * @dev Returns true if the account is excluded, and false otherwise.
       */
      function isExcluded(address account) public view returns (bool) {
          return excludeList[account];
      }
      
      receive() external payable {}
  }

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":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Paused","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":false,"internalType":"address","name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"inputs":[],"name":"Optimization","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":[{"internalType":"address","name":"account","type":"address"}],"name":"exclude","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":"isExcluded","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"taxStatus","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"triggerTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040526064600755662386f26fc100006008556e01688281178080f96ef3e6eceb7b2d601555601a805460ff191660011790553480156200004157600080fd5b50604051806040016040528060058152602001644e4f57414960d81b81525060405180604001604052806006815260200165244e4f57414960d01b8152508160039081620000909190620006cb565b5060046200009f8282620006cb565b50506005805460ff60a01b19169055506b204fce5e3e25026110000000600655620000ca33620003ed565b601a8054747a250d5630b4cf539739df2c5dacb4c659f2488d00610100600160a81b031990911617908190556040805163c45a015560e01b815290516101009092046001600160a01b03169163c45a0155916004808201926020929091908290030181865afa15801562000142573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000168919062000797565b601b80546001600160a01b0319166001600160a01b03928316908117909155601a54604080516315ab88c960e31b81529051929363c9c6539693309361010090049091169163ad5c46489160048083019260209291908290030181865afa158015620001d8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001fe919062000797565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af11580156200024c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000272919062000797565b601c80546001600160a01b03199081166001600160a01b039390931692909217905560408051686c697175696469747960b81b8082526019600980840182905284519384900360299081018520805461dead908916179055686d61726b6574696e6760b81b808652601786840181905287519687900383018720600290819055868852878501919091528751968790038301872060019081905582885260188886018190528951988990038501892092909255958752868401528651958690038201862094909455623232bb60e91b855260038501839052855194859003602301852080543390891681179091559385529084018290528451938490030183208054736b105a42797e8d04d48ec5dc73445efca75243a19087168117909155666368617269747960c81b845260078401919091529251918290036027019091208054909316909117909155620003c8906200043f565b620003d3306200043f565b620003e7336006546200053d60201b60201c565b620007f1565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6005546001600160a01b031633146200049f5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b6001600160a01b03811660009081526016602052604090205460ff1615620005195760405162461bcd60e51b815260206004820152602660248201527f436f696e546f6b656e3a204163636f756e7420697320616c726561647920657860448201526518db1d59195960d21b606482015260840162000496565b6001600160a01b03166000908152601660205260409020805460ff19166001179055565b6001600160a01b038216620005955760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604482015260640162000496565b8060026000828254620005a99190620007c9565b90915550506001600160a01b03821660009081526020819052604081208054839290620005d8908490620007c9565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b505050565b634e487b7160e01b600052604160045260246000fd5b600181811c908216806200065257607f821691505b6020821081036200067357634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200062257600081815260208120601f850160051c81016020861015620006a25750805b601f850160051c820191505b81811015620006c357828155600101620006ae565b505050505050565b81516001600160401b03811115620006e757620006e762000627565b620006ff81620006f884546200063d565b8462000679565b602080601f8311600181146200073757600084156200071e5750858301515b600019600386901b1c1916600185901b178555620006c3565b600085815260208120601f198616915b82811015620007685788860151825594840194600190910190840162000747565b5085821015620007875787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b600060208284031215620007aa57600080fd5b81516001600160a01b0381168114620007c257600080fd5b9392505050565b80820180821115620007eb57634e487b7160e01b600052601160045260246000fd5b92915050565b611b6180620008016000396000f3fe6080604052600436106101235760003560e01c80635c975abb116100a0578063a457c2d711610064578063a457c2d714610317578063a9059cbb14610337578063cba0e99614610357578063dd62ed3e14610390578063f2fde38b146103d657600080fd5b80635c975abb1461027057806370a082311461028f578063715018a6146102c55780638da5cb5b146102da57806395d89b411461030257600080fd5b806323b872dd116100e757806323b872dd146101dd5780632c32abc2146101fd578063313ce5671461021457806339509351146102305780634febf53d1461025057600080fd5b806306fdde031461012f578063095ea7b31461015a57806310c8aeac1461018a57806318160ddd146101ae57806323a38a38146101c357600080fd5b3661012a57005b600080fd5b34801561013b57600080fd5b506101446103f6565b604051610151919061172e565b60405180910390f35b34801561016657600080fd5b5061017a610175366004611791565b610488565b6040519015158152602001610151565b34801561019657600080fd5b506101a060155481565b604051908152602001610151565b3480156101ba57600080fd5b506002546101a0565b3480156101cf57600080fd5b50601a5461017a9060ff1681565b3480156101e957600080fd5b5061017a6101f83660046117bd565b61049f565b34801561020957600080fd5b50610212610550565b005b34801561022057600080fd5b5060405160128152602001610151565b34801561023c57600080fd5b5061017a61024b366004611791565b610596565b34801561025c57600080fd5b5061021261026b3660046117fe565b6105d2565b34801561027c57600080fd5b50600554600160a01b900460ff1661017a565b34801561029b57600080fd5b506101a06102aa3660046117fe565b6001600160a01b031660009081526020819052604090205490565b3480156102d157600080fd5b50610212610698565b3480156102e657600080fd5b506005546040516001600160a01b039091168152602001610151565b34801561030e57600080fd5b506101446106ce565b34801561032357600080fd5b5061017a610332366004611791565b6106dd565b34801561034357600080fd5b5061017a610352366004611791565b610776565b34801561036357600080fd5b5061017a6103723660046117fe565b6001600160a01b031660009081526016602052604090205460ff1690565b34801561039c57600080fd5b506101a06103ab36600461181b565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b3480156103e257600080fd5b506102126103f13660046117fe565b610783565b60606003805461040590611854565b80601f016020809104026020016040519081016040528092919081815260200182805461043190611854565b801561047e5780601f106104535761010080835404028352916020019161047e565b820191906000526020600020905b81548152906001019060200180831161046157829003601f168201915b5050505050905090565b600061049533848461081b565b5060015b92915050565b60006104ac84848461093f565b6001600160a01b0384166000908152600160209081526040808320338452909152902054828110156105365760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b60648201526084015b60405180910390fd5b610543853385840361081b565b60019150505b9392505050565b6005546001600160a01b0316331461057a5760405162461bcd60e51b815260040161052d9061188e565b601c54610593906000906001600160a01b031681610968565b50565b3360008181526001602090815260408083206001600160a01b038716845290915281205490916104959185906105cd9086906118d9565b61081b565b6005546001600160a01b031633146105fc5760405162461bcd60e51b815260040161052d9061188e565b6001600160a01b03811660009081526016602052604090205460ff16156106745760405162461bcd60e51b815260206004820152602660248201527f436f696e546f6b656e3a204163636f756e7420697320616c726561647920657860448201526518db1d59195960d21b606482015260840161052d565b6001600160a01b03166000908152601660205260409020805460ff19166001179055565b6005546001600160a01b031633146106c25760405162461bcd60e51b815260040161052d9061188e565b6106cc600061150d565b565b60606004805461040590611854565b3360009081526001602090815260408083206001600160a01b03861684529091528120548281101561075f5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b606482015260840161052d565b61076c338585840361081b565b5060019392505050565b600061049533848461093f565b6005546001600160a01b031633146107ad5760405162461bcd60e51b815260040161052d9061188e565b6001600160a01b0381166108125760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161052d565b6105938161150d565b6001600160a01b03831661087d5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b606482015260840161052d565b6001600160a01b0382166108de5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840161052d565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b601a5460ff161561095857610955838383610968565b90505b61096383838361155f565b505050565b6040805160028082526060820183526000928392919060208301908036833701905050905030816000815181106109a1576109a1611902565b60200260200101906001600160a01b031690816001600160a01b031681525050601a60019054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015610a14573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a389190611918565b81600181518110610a4b57610a4b611902565b60200260200101906001600160a01b031690816001600160a01b031681525050610a8d856001600160a01b031660009081526016602052604090205460ff1690565b158015610ab357506001600160a01b03841660009081526016602052604090205460ff16155b156115045760008060075485610ac99190611935565b601c549091506001600160a01b0390811690881603610cf9576017604051610af090611957565b90815260200160405180910390205481610b0a919061196c565b610b1490836118d9565b91506017604051610b2e90623232bb60e91b815260030190565b90815260200160405180910390205481610b48919061196c565b610b5290836118d9565b91506017604051610b7290686c697175696469747960b81b815260090190565b90815260200160405180910390205481610b8c919061196c565b610b9690836118d9565b91506017604051610bb490666368617269747960c81b815260070190565b90815260200160405180910390205481610bce919061196c565b610bd890836118d9565b91508115610beb57610beb87308461093f565b6017604051610bf990611957565b90815260200160405180910390205481610c13919061196c565b601d6000828254610c2491906118d9565b909155505060408051623232bb60e91b815260176003820152905190819003602301902054610c53908261196c565b601e6000828254610c6491906118d9565b909155505060408051686c697175696469747960b81b815260176009820152905190819003602901902054610c99908261196c565b601f6000828254610caa91906118d9565b909155505060408051666368617269747960c81b815260176007820152905190819003602701902054610cdd908261196c565b60206000828254610cee91906118d9565b909155506114f59050565b601c546001600160a01b03908116908716036114f5576018604051610d1d90611957565b90815260200160405180910390205481610d37919061196c565b610d4190836118d9565b91506018604051610d5b90623232bb60e91b815260030190565b90815260200160405180910390205481610d75919061196c565b610d7f90836118d9565b91506018604051610d9f90686c697175696469747960b81b815260090190565b90815260200160405180910390205481610db9919061196c565b610dc390836118d9565b91506018604051610de190666368617269747960c81b815260070190565b90815260200160405180910390205481610dfb919061196c565b610e0590836118d9565b91508115610e1857610e1887308461093f565b6018604051610e2690611957565b90815260200160405180910390205481610e40919061196c565b601d6000828254610e5191906118d9565b909155505060408051623232bb60e91b815260186003820152905190819003602301902054610e80908261196c565b601e6000828254610e9191906118d9565b909155505060408051686c697175696469747960b81b815260186009820152905190819003602901902054610ec6908261196c565b601f6000828254610ed791906118d9565b909155505060408051666368617269747960c81b815260186007820152905190819003602701902054610f0a908261196c565b60206000828254610f1b91906118d9565b925050819055506000602054601f54601e54601d54610f3a91906118d9565b610f4491906118d9565b610f4e91906118d9565b905080600003610f645785945050505050610549565b6000601a60019054906101000a90046001600160a01b03166001600160a01b031663d06ca61f602054601f54601e54601d54610fa091906118d9565b610faa91906118d9565b610fb491906118d9565b876040518363ffffffff1660e01b8152600401610fd29291906119cf565b600060405180830381865afa158015610fef573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261101791908101906119f0565b60018151811061102957611029611902565b6020026020010151905060085481106114f257602054601f54479160009161105390600290611935565b601e54601d5461106391906118d9565b61106d91906118d9565b61107791906118d9565b905061109930601a60019054906101000a90046001600160a01b03168361081b565b601a546040516318cbafe560e01b81526101009091046001600160a01b0316906318cbafe5906110d69084906000908c9030904290600401611aae565b6000604051808303816000875af11580156110f5573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261111d91908101906119f0565b50600061112a8347611aea565b905060006002601f5461113d9190611935565b90506000670de0b6b3a7640000876002601f5461115a9190611935565b61116c90670de0b6b3a764000061196c565b6111769190611935565b611180908561196c565b61118a9190611935565b90506000670de0b6b3a764000088601d54670de0b6b3a76400006111ae919061196c565b6111b89190611935565b6111c2908661196c565b6111cc9190611935565b90506000670de0b6b3a764000089601e54670de0b6b3a76400006111f0919061196c565b6111fa9190611935565b611204908761196c565b61120e9190611935565b90506000670de0b6b3a76400008a602054670de0b6b3a7640000611232919061196c565b61123c9190611935565b611246908861196c565b6112509190611935565b905061127230601a60019054906101000a90046001600160a01b03168761081b565b601a5460405163f305d71960e01b8152306004820152602481018790526000604482018190526064820181905261dead60848301524260a48301529161010090046001600160a01b03169063f305d71990879060c40160606040518083038185885af11580156112e6573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061130b9190611afd565b505090506000818961131d91906118d9565b602054601f54601e54601d5461133391906118d9565b61133d91906118d9565b61134791906118d9565b6113519190611aea565b905080156113945761139430601960405161137590623232bb60e91b815260030190565b908152604051908190036020019020546001600160a01b03168361093f565b600060196040516113a490611957565b908152604051908190036020018120546001600160a01b031690879060006040518083038185875af1925050503d80600081146113fd576040519150601f19603f3d011682016040523d82523d6000602084013e611402565b606091505b50909150600090508488611416888a6118d9565b61142091906118d9565b61142a91906118d9565b611434908b611aea565b11156114d257601960405161144890611957565b908152604051908190036020019020546001600160a01b0316848861146d888a6118d9565b61147791906118d9565b61148191906118d9565b61148b908b611aea565b604051600081818185875af1925050503d80600081146114c7576040519150601f19603f3d011682016040523d82523d6000602084013e6114cc565b606091505b50909150505b50506000601d819055601e819055601f8190556020555050505050505050505b50505b6114ff8286611aea565b945050505b50909392505050565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b0383166115c35760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b606482015260840161052d565b6001600160a01b0382166116255760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b606482015260840161052d565b6001600160a01b0383166000908152602081905260409020548181101561169d5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b606482015260840161052d565b6001600160a01b038085166000908152602081905260408082208585039055918516815290812080548492906116d49084906118d9565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161172091815260200190565b60405180910390a350505050565b600060208083528351808285015260005b8181101561175b5785810183015185820160400152820161173f565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b038116811461059357600080fd5b600080604083850312156117a457600080fd5b82356117af8161177c565b946020939093013593505050565b6000806000606084860312156117d257600080fd5b83356117dd8161177c565b925060208401356117ed8161177c565b929592945050506040919091013590565b60006020828403121561181057600080fd5b81356105498161177c565b6000806040838503121561182e57600080fd5b82356118398161177c565b915060208301356118498161177c565b809150509250929050565b600181811c9082168061186857607f821691505b60208210810361188857634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b80820180821115610499576104996118c3565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b60006020828403121561192a57600080fd5b81516105498161177c565b60008261195257634e487b7160e01b600052601260045260246000fd5b500490565b686d61726b6574696e6760b81b815260090190565b6000816000190483118215151615611986576119866118c3565b500290565b600081518084526020808501945080840160005b838110156119c45781516001600160a01b03168752958201959082019060010161199f565b509495945050505050565b8281526040602082015260006119e8604083018461198b565b949350505050565b60006020808385031215611a0357600080fd5b825167ffffffffffffffff80821115611a1b57600080fd5b818501915085601f830112611a2f57600080fd5b815181811115611a4157611a416118ec565b8060051b604051601f19603f83011681018181108582111715611a6657611a666118ec565b604052918252848201925083810185019188831115611a8457600080fd5b938501935b82851015611aa257845184529385019392850192611a89565b98975050505050505050565b85815284602082015260a060408201526000611acd60a083018661198b565b6001600160a01b0394909416606083015250608001529392505050565b81810381811115610499576104996118c3565b600080600060608486031215611b1257600080fd5b835192506020840151915060408401519050925092509256fea2646970667358221220c4699b47c6adf6ed367006fd2c81c9d47173547fa0c5876d3e9f0f200543c33b64736f6c63430008100033

Deployed Bytecode

0x6080604052600436106101235760003560e01c80635c975abb116100a0578063a457c2d711610064578063a457c2d714610317578063a9059cbb14610337578063cba0e99614610357578063dd62ed3e14610390578063f2fde38b146103d657600080fd5b80635c975abb1461027057806370a082311461028f578063715018a6146102c55780638da5cb5b146102da57806395d89b411461030257600080fd5b806323b872dd116100e757806323b872dd146101dd5780632c32abc2146101fd578063313ce5671461021457806339509351146102305780634febf53d1461025057600080fd5b806306fdde031461012f578063095ea7b31461015a57806310c8aeac1461018a57806318160ddd146101ae57806323a38a38146101c357600080fd5b3661012a57005b600080fd5b34801561013b57600080fd5b506101446103f6565b604051610151919061172e565b60405180910390f35b34801561016657600080fd5b5061017a610175366004611791565b610488565b6040519015158152602001610151565b34801561019657600080fd5b506101a060155481565b604051908152602001610151565b3480156101ba57600080fd5b506002546101a0565b3480156101cf57600080fd5b50601a5461017a9060ff1681565b3480156101e957600080fd5b5061017a6101f83660046117bd565b61049f565b34801561020957600080fd5b50610212610550565b005b34801561022057600080fd5b5060405160128152602001610151565b34801561023c57600080fd5b5061017a61024b366004611791565b610596565b34801561025c57600080fd5b5061021261026b3660046117fe565b6105d2565b34801561027c57600080fd5b50600554600160a01b900460ff1661017a565b34801561029b57600080fd5b506101a06102aa3660046117fe565b6001600160a01b031660009081526020819052604090205490565b3480156102d157600080fd5b50610212610698565b3480156102e657600080fd5b506005546040516001600160a01b039091168152602001610151565b34801561030e57600080fd5b506101446106ce565b34801561032357600080fd5b5061017a610332366004611791565b6106dd565b34801561034357600080fd5b5061017a610352366004611791565b610776565b34801561036357600080fd5b5061017a6103723660046117fe565b6001600160a01b031660009081526016602052604090205460ff1690565b34801561039c57600080fd5b506101a06103ab36600461181b565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b3480156103e257600080fd5b506102126103f13660046117fe565b610783565b60606003805461040590611854565b80601f016020809104026020016040519081016040528092919081815260200182805461043190611854565b801561047e5780601f106104535761010080835404028352916020019161047e565b820191906000526020600020905b81548152906001019060200180831161046157829003601f168201915b5050505050905090565b600061049533848461081b565b5060015b92915050565b60006104ac84848461093f565b6001600160a01b0384166000908152600160209081526040808320338452909152902054828110156105365760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b60648201526084015b60405180910390fd5b610543853385840361081b565b60019150505b9392505050565b6005546001600160a01b0316331461057a5760405162461bcd60e51b815260040161052d9061188e565b601c54610593906000906001600160a01b031681610968565b50565b3360008181526001602090815260408083206001600160a01b038716845290915281205490916104959185906105cd9086906118d9565b61081b565b6005546001600160a01b031633146105fc5760405162461bcd60e51b815260040161052d9061188e565b6001600160a01b03811660009081526016602052604090205460ff16156106745760405162461bcd60e51b815260206004820152602660248201527f436f696e546f6b656e3a204163636f756e7420697320616c726561647920657860448201526518db1d59195960d21b606482015260840161052d565b6001600160a01b03166000908152601660205260409020805460ff19166001179055565b6005546001600160a01b031633146106c25760405162461bcd60e51b815260040161052d9061188e565b6106cc600061150d565b565b60606004805461040590611854565b3360009081526001602090815260408083206001600160a01b03861684529091528120548281101561075f5760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b606482015260840161052d565b61076c338585840361081b565b5060019392505050565b600061049533848461093f565b6005546001600160a01b031633146107ad5760405162461bcd60e51b815260040161052d9061188e565b6001600160a01b0381166108125760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161052d565b6105938161150d565b6001600160a01b03831661087d5760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b606482015260840161052d565b6001600160a01b0382166108de5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b606482015260840161052d565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b601a5460ff161561095857610955838383610968565b90505b61096383838361155f565b505050565b6040805160028082526060820183526000928392919060208301908036833701905050905030816000815181106109a1576109a1611902565b60200260200101906001600160a01b031690816001600160a01b031681525050601a60019054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015610a14573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a389190611918565b81600181518110610a4b57610a4b611902565b60200260200101906001600160a01b031690816001600160a01b031681525050610a8d856001600160a01b031660009081526016602052604090205460ff1690565b158015610ab357506001600160a01b03841660009081526016602052604090205460ff16155b156115045760008060075485610ac99190611935565b601c549091506001600160a01b0390811690881603610cf9576017604051610af090611957565b90815260200160405180910390205481610b0a919061196c565b610b1490836118d9565b91506017604051610b2e90623232bb60e91b815260030190565b90815260200160405180910390205481610b48919061196c565b610b5290836118d9565b91506017604051610b7290686c697175696469747960b81b815260090190565b90815260200160405180910390205481610b8c919061196c565b610b9690836118d9565b91506017604051610bb490666368617269747960c81b815260070190565b90815260200160405180910390205481610bce919061196c565b610bd890836118d9565b91508115610beb57610beb87308461093f565b6017604051610bf990611957565b90815260200160405180910390205481610c13919061196c565b601d6000828254610c2491906118d9565b909155505060408051623232bb60e91b815260176003820152905190819003602301902054610c53908261196c565b601e6000828254610c6491906118d9565b909155505060408051686c697175696469747960b81b815260176009820152905190819003602901902054610c99908261196c565b601f6000828254610caa91906118d9565b909155505060408051666368617269747960c81b815260176007820152905190819003602701902054610cdd908261196c565b60206000828254610cee91906118d9565b909155506114f59050565b601c546001600160a01b03908116908716036114f5576018604051610d1d90611957565b90815260200160405180910390205481610d37919061196c565b610d4190836118d9565b91506018604051610d5b90623232bb60e91b815260030190565b90815260200160405180910390205481610d75919061196c565b610d7f90836118d9565b91506018604051610d9f90686c697175696469747960b81b815260090190565b90815260200160405180910390205481610db9919061196c565b610dc390836118d9565b91506018604051610de190666368617269747960c81b815260070190565b90815260200160405180910390205481610dfb919061196c565b610e0590836118d9565b91508115610e1857610e1887308461093f565b6018604051610e2690611957565b90815260200160405180910390205481610e40919061196c565b601d6000828254610e5191906118d9565b909155505060408051623232bb60e91b815260186003820152905190819003602301902054610e80908261196c565b601e6000828254610e9191906118d9565b909155505060408051686c697175696469747960b81b815260186009820152905190819003602901902054610ec6908261196c565b601f6000828254610ed791906118d9565b909155505060408051666368617269747960c81b815260186007820152905190819003602701902054610f0a908261196c565b60206000828254610f1b91906118d9565b925050819055506000602054601f54601e54601d54610f3a91906118d9565b610f4491906118d9565b610f4e91906118d9565b905080600003610f645785945050505050610549565b6000601a60019054906101000a90046001600160a01b03166001600160a01b031663d06ca61f602054601f54601e54601d54610fa091906118d9565b610faa91906118d9565b610fb491906118d9565b876040518363ffffffff1660e01b8152600401610fd29291906119cf565b600060405180830381865afa158015610fef573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261101791908101906119f0565b60018151811061102957611029611902565b6020026020010151905060085481106114f257602054601f54479160009161105390600290611935565b601e54601d5461106391906118d9565b61106d91906118d9565b61107791906118d9565b905061109930601a60019054906101000a90046001600160a01b03168361081b565b601a546040516318cbafe560e01b81526101009091046001600160a01b0316906318cbafe5906110d69084906000908c9030904290600401611aae565b6000604051808303816000875af11580156110f5573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261111d91908101906119f0565b50600061112a8347611aea565b905060006002601f5461113d9190611935565b90506000670de0b6b3a7640000876002601f5461115a9190611935565b61116c90670de0b6b3a764000061196c565b6111769190611935565b611180908561196c565b61118a9190611935565b90506000670de0b6b3a764000088601d54670de0b6b3a76400006111ae919061196c565b6111b89190611935565b6111c2908661196c565b6111cc9190611935565b90506000670de0b6b3a764000089601e54670de0b6b3a76400006111f0919061196c565b6111fa9190611935565b611204908761196c565b61120e9190611935565b90506000670de0b6b3a76400008a602054670de0b6b3a7640000611232919061196c565b61123c9190611935565b611246908861196c565b6112509190611935565b905061127230601a60019054906101000a90046001600160a01b03168761081b565b601a5460405163f305d71960e01b8152306004820152602481018790526000604482018190526064820181905261dead60848301524260a48301529161010090046001600160a01b03169063f305d71990879060c40160606040518083038185885af11580156112e6573d6000803e3d6000fd5b50505050506040513d601f19601f8201168201806040525081019061130b9190611afd565b505090506000818961131d91906118d9565b602054601f54601e54601d5461133391906118d9565b61133d91906118d9565b61134791906118d9565b6113519190611aea565b905080156113945761139430601960405161137590623232bb60e91b815260030190565b908152604051908190036020019020546001600160a01b03168361093f565b600060196040516113a490611957565b908152604051908190036020018120546001600160a01b031690879060006040518083038185875af1925050503d80600081146113fd576040519150601f19603f3d011682016040523d82523d6000602084013e611402565b606091505b50909150600090508488611416888a6118d9565b61142091906118d9565b61142a91906118d9565b611434908b611aea565b11156114d257601960405161144890611957565b908152604051908190036020019020546001600160a01b0316848861146d888a6118d9565b61147791906118d9565b61148191906118d9565b61148b908b611aea565b604051600081818185875af1925050503d80600081146114c7576040519150601f19603f3d011682016040523d82523d6000602084013e6114cc565b606091505b50909150505b50506000601d819055601e819055601f8190556020555050505050505050505b50505b6114ff8286611aea565b945050505b50909392505050565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b0383166115c35760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b606482015260840161052d565b6001600160a01b0382166116255760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b606482015260840161052d565b6001600160a01b0383166000908152602081905260409020548181101561169d5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b606482015260840161052d565b6001600160a01b038085166000908152602081905260408082208585039055918516815290812080548492906116d49084906118d9565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161172091815260200190565b60405180910390a350505050565b600060208083528351808285015260005b8181101561175b5785810183015185820160400152820161173f565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b038116811461059357600080fd5b600080604083850312156117a457600080fd5b82356117af8161177c565b946020939093013593505050565b6000806000606084860312156117d257600080fd5b83356117dd8161177c565b925060208401356117ed8161177c565b929592945050506040919091013590565b60006020828403121561181057600080fd5b81356105498161177c565b6000806040838503121561182e57600080fd5b82356118398161177c565b915060208301356118498161177c565b809150509250929050565b600181811c9082168061186857607f821691505b60208210810361188857634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b80820180821115610499576104996118c3565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b60006020828403121561192a57600080fd5b81516105498161177c565b60008261195257634e487b7160e01b600052601260045260246000fd5b500490565b686d61726b6574696e6760b81b815260090190565b6000816000190483118215151615611986576119866118c3565b500290565b600081518084526020808501945080840160005b838110156119c45781516001600160a01b03168752958201959082019060010161199f565b509495945050505050565b8281526040602082015260006119e8604083018461198b565b949350505050565b60006020808385031215611a0357600080fd5b825167ffffffffffffffff80821115611a1b57600080fd5b818501915085601f830112611a2f57600080fd5b815181811115611a4157611a416118ec565b8060051b604051601f19603f83011681018181108582111715611a6657611a666118ec565b604052918252848201925083810185019188831115611a8457600080fd5b938501935b82851015611aa257845184529385019392850192611a89565b98975050505050505050565b85815284602082015260a060408201526000611acd60a083018661198b565b6001600160a01b0394909416606083015250608001529392505050565b81810381811115610499576104996118c3565b600080600060608486031215611b1257600080fd5b835192506020840151915060408401519050925092509256fea2646970667358221220c4699b47c6adf6ed367006fd2c81c9d47173547fa0c5876d3e9f0f200543c33b64736f6c63430008100033

Deployed Bytecode Sourcemap

30501:8857:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6955:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9262:175;;;;;;;;;;-1:-1:-1;9262:175:0;;;;;:::i;:::-;;:::i;:::-;;;1188:14:1;;1181:22;1163:41;;1151:2;1136:18;9262:175:0;1023:187:1;31356:64:0;;;;;;;;;;;;;;;;;;;1361:25:1;;;1349:2;1334:18;31356:64:0;1215:177:1;8139:112:0;;;;;;;;;;-1:-1:-1;8229:12:0;;8139:112;;31661:28;;;;;;;;;;-1:-1:-1;31661:28:0;;;;;;;;9949:520;;;;;;;;;;-1:-1:-1;9949:520:0;;;;;:::i;:::-;;:::i;38641:110::-;;;;;;;;;;;;;:::i;:::-;;7967:97;;;;;;;;;;-1:-1:-1;7967:97:0;;8052:2;2000:36:1;;1988:2;1973:18;7967:97:0;1858:184:1;10906:221:0;;;;;;;;;;-1:-1:-1;10906:221:0;;;;;:::i;:::-;;:::i;38876:185::-;;;;;;;;;;-1:-1:-1;38876:185:0;;;;;:::i;:::-;;:::i;20842:90::-;;;;;;;;;;-1:-1:-1;20915:7:0;;-1:-1:-1;;;20915:7:0;;;;20842:90;;8324:131;;;;;;;;;;-1:-1:-1;8324:131:0;;;;;:::i;:::-;-1:-1:-1;;;;;8427:18:0;8398:7;8427:18;;;;;;;;;;;;8324:131;19125:98;;;;;;;;;;;;;:::i;18436:91::-;;;;;;;;;;-1:-1:-1;18511:6:0;;18436:91;;-1:-1:-1;;;;;18511:6:0;;;2445:51:1;;2433:2;2418:18;18436:91:0;2299:203:1;7190:108:0;;;;;;;;;;;;;:::i;11662:429::-;;;;;;;;;;-1:-1:-1;11662:429:0;;;;;:::i;:::-;;:::i;8688:181::-;;;;;;;;;;-1:-1:-1;8688:181:0;;;;;:::i;:::-;;:::i;39194:114::-;;;;;;;;;;-1:-1:-1;39194:114:0;;;;;:::i;:::-;-1:-1:-1;;;;;39278:20:0;39252:4;39278:20;;;:11;:20;;;;;;;;;39194:114;8942:155;;;;;;;;;;-1:-1:-1;8942:155:0;;;;;:::i;:::-;-1:-1:-1;;;;;9060:18:0;;;9031:7;9060:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;8942:155;19390:198;;;;;;;;;;-1:-1:-1;19390:198:0;;;;;:::i;:::-;;:::i;6955:104::-;7009:13;7044:5;7037:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6955:104;:::o;9262:175::-;9345:4;9364:39;4736:10;9387:7;9396:6;9364:8;:39::i;:::-;-1:-1:-1;9423:4:0;9262:175;;;;;:::o;9949:520::-;10097:4;10116:36;10126:6;10134:9;10145:6;10116:9;:36::i;:::-;-1:-1:-1;;;;;10196:19:0;;10169:24;10196:19;;;:11;:19;;;;;;;;4736:10;10196:33;;;;;;;;10250:26;;;;10242:79;;;;-1:-1:-1;;;10242:79:0;;3487:2:1;10242:79:0;;;3469:21:1;3526:2;3506:18;;;3499:30;3565:34;3545:18;;;3538:62;-1:-1:-1;;;3616:18:1;;;3609:38;3664:19;;10242:79:0;;;;;;;;;10361:57;10370:6;4736:10;10411:6;10392:16;:25;10361:8;:57::i;:::-;10455:4;10448:11;;;9949:520;;;;;;:::o;38641:110::-;18511:6;;-1:-1:-1;;;;;18511:6:0;4736:10;18672:23;18664:68;;;;-1:-1:-1;;;18664:68:0;;;;;;;:::i;:::-;38723:13:::1;::::0;38693:48:::1;::::0;38711:1:::1;::::0;-1:-1:-1;;;;;38723:13:0::1;38711:1:::0;38693:9:::1;:48::i;:::-;;38641:110::o:0;10906:221::-;4736:10;10994:4;11045:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;11045:34:0;;;;;;;;;;10994:4;;11013:80;;11036:7;;11045:47;;11082:10;;11045:47;:::i;:::-;11013:8;:80::i;38876:185::-;18511:6;;-1:-1:-1;;;;;18511:6:0;4736:10;18672:23;18664:68;;;;-1:-1:-1;;;18664:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;39278:20:0;;39252:4;39278:20;;;:11;:20;;;;;;;;38948::::1;38940:71;;;::::0;-1:-1:-1;;;38940:71:0;;4519:2:1;38940:71:0::1;::::0;::::1;4501:21:1::0;4558:2;4538:18;;;4531:30;4597:34;4577:18;;;4570:62;-1:-1:-1;;;4648:18:1;;;4641:36;4694:19;;38940:71:0::1;4317:402:1::0;38940:71:0::1;-1:-1:-1::0;;;;;39024:20:0::1;;::::0;;;:11:::1;:20;::::0;;;;:27;;-1:-1:-1;;39024:27:0::1;39047:4;39024:27;::::0;;38876:185::o;19125:98::-;18511:6;;-1:-1:-1;;;;;18511:6:0;4736:10;18672:23;18664:68;;;;-1:-1:-1;;;18664:68:0;;;;;;;:::i;:::-;19192:21:::1;19210:1;19192:9;:21::i;:::-;19125:98::o:0;7190:108::-;7246:13;7281:7;7274:14;;;;;:::i;11662:429::-;4736:10;11755:4;11801:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;11801:34:0;;;;;;;;;;11856:35;;;;11848:85;;;;-1:-1:-1;;;11848:85:0;;4926:2:1;11848:85:0;;;4908:21:1;4965:2;4945:18;;;4938:30;5004:34;4984:18;;;4977:62;-1:-1:-1;;;5055:18:1;;;5048:35;5100:19;;11848:85:0;4724:401:1;11848:85:0;11973:67;4736:10;11996:7;12024:15;12005:16;:34;11973:8;:67::i;:::-;-1:-1:-1;12077:4:0;;11662:429;-1:-1:-1;;;11662:429:0:o;8688:181::-;8774:4;8793:42;4736:10;8817:9;8828:6;8793:9;:42::i;19390:198::-;18511:6;;-1:-1:-1;;;;;18511:6:0;4736:10;18672:23;18664:68;;;;-1:-1:-1;;;18664:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;19481:22:0;::::1;19473:73;;;::::0;-1:-1:-1;;;19473:73:0;;5332:2:1;19473:73:0::1;::::0;::::1;5314:21:1::0;5371:2;5351:18;;;5344:30;5410:34;5390:18;;;5383:62;-1:-1:-1;;;5461:18:1;;;5454:36;5507:19;;19473:73:0::1;5130:402:1::0;19473:73:0::1;19559:19;19569:8;19559:9;:19::i;15562:400::-:0;-1:-1:-1;;;;;15708:19:0;;15700:68;;;;-1:-1:-1;;;15700:68:0;;5739:2:1;15700:68:0;;;5721:21:1;5778:2;5758:18;;;5751:30;5817:34;5797:18;;;5790:62;-1:-1:-1;;;5868:18:1;;;5861:34;5912:19;;15700:68:0;5537:400:1;15700:68:0;-1:-1:-1;;;;;15789:21:0;;15781:68;;;;-1:-1:-1;;;15781:68:0;;6144:2:1;15781:68:0;;;6126:21:1;6183:2;6163:18;;;6156:30;6222:34;6202:18;;;6195:62;-1:-1:-1;;;6273:18:1;;;6266:32;6315:19;;15781:68:0;5942:398:1;15781:68:0;-1:-1:-1;;;;;15866:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;15920:32;;1361:25:1;;;15920:32:0;;1334:18:1;15920:32:0;;;;;;;15562:400;;;:::o;38216:332::-;38382:9;;;;38379:93;;;38419:36;38429:6;38437:9;38448:6;38419:9;:36::i;:::-;38410:45;;38379:93;38496:42;38512:6;38520:9;38531:6;38496:15;:42::i;:::-;38216:332;;;:::o;33028:5172::-;33156:16;;;33170:1;33156:16;;;;;;;;33106:7;;;;33156:16;33170:1;33156:16;;;;;;;;;;-1:-1:-1;33156:16:0;33128:44;;33207:4;33185:8;33194:1;33185:11;;;;;;;;:::i;:::-;;;;;;:27;-1:-1:-1;;;;;33185:27:0;;;-1:-1:-1;;;;;33185:27:0;;;;;33239:17;;;;;;;;;-1:-1:-1;;;;;33239:17:0;-1:-1:-1;;;;;33239:22:0;;:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;33225:8;33234:1;33225:11;;;;;;;;:::i;:::-;;;;;;:38;-1:-1:-1;;;;;33225:38:0;;;-1:-1:-1;;;;;33225:38:0;;;;;33292:16;33303:4;-1:-1:-1;;;;;39278:20:0;39252:4;39278:20;;;:11;:20;;;;;;;;;39194:114;33292:16;33291:17;:36;;;;-1:-1:-1;;;;;;39278:20:0;;39252:4;39278:20;;;:11;:20;;;;;;;;33312:15;33291:36;33288:4865;;;33346:11;33374:16;33402:11;;33393:6;:20;;;;:::i;:::-;33449:13;;33374:39;;-1:-1:-1;;;;;;33449:13:0;;;33433:30;;;;33430:4664;;33504:8;:21;;;;;:::i;:::-;;;;;;;;;;;;;;33493:8;:32;;;;:::i;:::-;33486:39;;;;:::i;:::-;;;33564:8;:15;;;;-1:-1:-1;;;7726:18:1;;7769:1;7760:11;;7524:253;33564:15:0;;;;;;;;;;;;;;33553:8;:26;;;;:::i;:::-;33546:33;;;;:::i;:::-;;;33618:8;:21;;;;-1:-1:-1;;;7984:24:1;;8033:1;8024:11;;7782:259;33618:21:0;;;;;;;;;;;;;;33607:8;:32;;;;:::i;:::-;33600:39;;;;:::i;:::-;;;33678:8;:19;;;;-1:-1:-1;;;8248:22:1;;8295:1;8286:11;;8046:257;33678:19:0;;;;;;;;;;;;;;33667:8;:30;;;;:::i;:::-;33660:37;;;;:::i;:::-;;-1:-1:-1;33741:7:0;;33738:97;;33775:35;33785:4;33799;33806:3;33775:9;:35::i;:::-;33905:8;:21;;;;;:::i;:::-;;;;;;;;;;;;;;33894:8;:32;;;;:::i;:::-;33875:15;;:51;;;;;;;:::i;:::-;;;;-1:-1:-1;;33971:15:0;;;-1:-1:-1;;;7726:18:1;;33971:8:0;7769:1:1;7760:11;;33971:15:0;;;;;;;;;;;;33960:26;;:8;:26;:::i;:::-;33947:9;;:39;;;;;;;:::i;:::-;;;;-1:-1:-1;;34037:21:0;;;-1:-1:-1;;;7984:24:1;;34037:8:0;8033:1:1;8024:11;;34037:21:0;;;;;;;;;;;;34026:32;;:8;:32;:::i;:::-;34007:15;;:51;;;;;;;:::i;:::-;;;;-1:-1:-1;;34107:19:0;;;-1:-1:-1;;;8248:22:1;;34107:8:0;8295:1:1;8286:11;;34107:19:0;;;;;;;;;;;;34096:30;;:8;:30;:::i;:::-;34079:13;;:47;;;;;;;:::i;:::-;;;;-1:-1:-1;33430:4664:0;;-1:-1:-1;33430:4664:0;;34167:13;;-1:-1:-1;;;;;34167:13:0;;;34153:28;;;;34150:3944;;34222:9;:22;;;;;:::i;:::-;;;;;;;;;;;;;;34211:8;:33;;;;:::i;:::-;34204:40;;;;:::i;:::-;;;34283:9;:16;;;;-1:-1:-1;;;7726:18:1;;7769:1;7760:11;;7524:253;34283:16:0;;;;;;;;;;;;;;34272:8;:27;;;;:::i;:::-;34265:34;;;;:::i;:::-;;;34338:9;:22;;;;-1:-1:-1;;;7984:24:1;;8033:1;8024:11;;7782:259;34338:22:0;;;;;;;;;;;;;;34327:8;:33;;;;:::i;:::-;34320:40;;;;:::i;:::-;;;34399:9;:20;;;;-1:-1:-1;;;8248:22:1;;8295:1;8286:11;;8046:257;34399:20:0;;;;;;;;;;;;;;34388:8;:31;;;;:::i;:::-;34381:38;;;;:::i;:::-;;-1:-1:-1;34463:7:0;;34460:97;;34497:35;34507:4;34521;34528:3;34497:9;:35::i;:::-;34627:9;:22;;;;;:::i;:::-;;;;;;;;;;;;;;34616:8;:33;;;;:::i;:::-;34597:15;;:52;;;;;;;:::i;:::-;;;;-1:-1:-1;;34694:16:0;;;-1:-1:-1;;;7726:18:1;;34694:9:0;7769:1:1;7760:11;;34694:16:0;;;;;;;;;;;;34683:27;;:8;:27;:::i;:::-;34670:9;;:40;;;;;;;:::i;:::-;;;;-1:-1:-1;;34761:22:0;;;-1:-1:-1;;;7984:24:1;;34761:9:0;8033:1:1;8024:11;;34761:22:0;;;;;;;;;;;;34750:33;;:8;:33;:::i;:::-;34731:15;;:52;;;;;;;:::i;:::-;;;;-1:-1:-1;;34832:20:0;;;-1:-1:-1;;;8248:22:1;;34832:9:0;8295:1:1;8286:11;;34832:20:0;;;;;;;;;;;;34821:31;;:8;:31;:::i;:::-;34804:13;;:48;;;;;;;:::i;:::-;;;;;;;;34893:14;34958:13;;34940:15;;34928:9;;34910:15;;:27;;;;:::i;:::-;:45;;;;:::i;:::-;:61;;;;:::i;:::-;34893:78;;35015:6;35025:1;35015:11;35012:29;;35035:6;35028:13;;;;;;;;35012:29;35082:16;35101:17;;;;;;;;;-1:-1:-1;;;;;35101:17:0;-1:-1:-1;;;;;35101:31:0;;35181:13;;35163:15;;35151:9;;35133:15;;:27;;;;:::i;:::-;:45;;;;:::i;:::-;:61;;;;:::i;:::-;35196:8;35101:104;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;35101:104:0;;;;;;;;;;;;:::i;:::-;35206:1;35101:107;;;;;;;;:::i;:::-;;;;;;;35082:126;;35264:13;;35252:8;:25;35249:2808;;35446:13;;35424:15;;35327:21;;35304:20;;35424:19;;35442:1;;35424:19;:::i;:::-;35412:9;;35394:15;;:27;;;;:::i;:::-;:49;;;;:::i;:::-;:65;;;;:::i;:::-;35377:82;;35508:59;35525:4;35540:17;;;;;;;;;-1:-1:-1;;;;;35540:17:0;35560:6;35508:8;:59::i;:::-;35608:17;;:252;;-1:-1:-1;;;35608:252:0;;:17;;;;-1:-1:-1;;;;;35608:17:0;;:39;;:252;;35676:6;;35711:1;;35741:8;;35786:4;;35820:15;;35608:252;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;35608:252:0;;;;;;;;;;;;:::i;:::-;-1:-1:-1;35909:17:0;35929:36;35953:12;35929:21;:36;:::i;:::-;35909:56;;36014:22;36057:1;36039:15;;:19;;;;:::i;:::-;36014:44;;36083:20;36164:6;36153;36139:1;36121:15;;:19;;;;:::i;:::-;:28;;36143:6;36121:28;:::i;:::-;36120:39;;;;:::i;:::-;36107:53;;:9;:53;:::i;:::-;36106:64;;;;:::i;:::-;36083:87;;36219:20;36296:6;36285;36257:15;;36275:6;36257:24;;;;:::i;:::-;36256:35;;;;:::i;:::-;36243:49;;:9;:49;:::i;:::-;36242:60;;;;:::i;:::-;36219:83;;36327:14;36392:6;36381;36359:9;;36371:6;36359:18;;;;:::i;:::-;36358:29;;;;:::i;:::-;36345:43;;:9;:43;:::i;:::-;36344:54;;;;:::i;:::-;36327:71;;36423:18;36496:6;36485;36459:13;;36475:6;36459:22;;;;:::i;:::-;36458:33;;;;:::i;:::-;36445:47;;:9;:47;:::i;:::-;36444:58;;;;:::i;:::-;36423:79;;36551:67;36568:4;36583:17;;;;;;;;;-1:-1:-1;;;;;36583:17:0;36603:14;36551:8;:67::i;:::-;36691:17;;:312;;-1:-1:-1;;;36691:312:0;;36782:4;36691:312;;;11282:34:1;11332:18;;;11325:34;;;36668:16:0;11375:18:1;;;11368:34;;;11418:18;;;11411:34;;;36927:6:0;11461:19:1;;;11454:44;36963:15:0;11514:19:1;;;11507:35;36668:16:0;36691:17;;;-1:-1:-1;;;;;36691:17:0;;:33;;36732:12;;11216:19:1;;36691:312:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;36667:336;;;;37052:23;37154:11;37145:6;:20;;;;:::i;:::-;37127:13;;37109:15;;37097:9;;37079:15;;:27;;;;:::i;:::-;:45;;;;:::i;:::-;:61;;;;:::i;:::-;37078:88;;;;:::i;:::-;37052:114;-1:-1:-1;37218:19:0;;37215:139;;37268:60;37286:4;37293:10;:17;;;;-1:-1:-1;;;7726:18:1;;7769:1;7760:11;;7524:253;37293:17:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;37293:17:0;37312:15;37268:9;:60::i;:::-;37429:6;37470:10;:23;;;;;:::i;:::-;;;;;;;;;;;;;;;-1:-1:-1;;;;;37470:23:0;;37506:12;;37470:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;37462:61:0;;-1:-1:-1;37621:1:0;;-1:-1:-1;37607:10:0;37592:12;37568:21;37583:6;37568:12;:21;:::i;:::-;:36;;;;:::i;:::-;:49;;;;:::i;:::-;37555:63;;:9;:63;:::i;:::-;:67;37552:241;;;37661:10;:23;;;;;:::i;:::-;;;;;;;;;;;;;;;-1:-1:-1;;;;;37661:23:0;37749:10;37734:12;37710:21;37725:6;37710:12;:21;:::i;:::-;:36;;;;:::i;:::-;:49;;;;:::i;:::-;37697:63;;:9;:63;:::i;:::-;37661:104;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;37653:112:0;;-1:-1:-1;;37552:241:0;-1:-1:-1;;37910:1:0;37892:15;:19;;;37936:9;:13;;;37974:15;:19;;;38018:13;:17;-1:-1:-1;;;;;;;;;35249:2808:0;34183:3911;;34150:3944;38126:13;38136:3;38126:13;;:::i;:::-;;;33329:4824;;33288:4865;-1:-1:-1;38184:6:0;;33028:5172;-1:-1:-1;;;33028:5172:0:o;19600:182::-;19678:6;;;-1:-1:-1;;;;;19697:17:0;;;-1:-1:-1;;;;;;19697:17:0;;;;;;;19732:40;;19678:6;;;19697:17;19678:6;;19732:40;;19659:16;;19732:40;19646:136;19600:182;:::o;12613:773::-;-1:-1:-1;;;;;12763:20:0;;12755:70;;;;-1:-1:-1;;;12755:70:0;;12276:2:1;12755:70:0;;;12258:21:1;12315:2;12295:18;;;12288:30;12354:34;12334:18;;;12327:62;-1:-1:-1;;;12405:18:1;;;12398:35;12450:19;;12755:70:0;12074:401:1;12755:70:0;-1:-1:-1;;;;;12846:23:0;;12838:71;;;;-1:-1:-1;;;12838:71:0;;12682:2:1;12838:71:0;;;12664:21:1;12721:2;12701:18;;;12694:30;12760:34;12740:18;;;12733:62;-1:-1:-1;;;12811:18:1;;;12804:33;12854:19;;12838:71:0;12480:399:1;12838:71:0;-1:-1:-1;;;;;13014:17:0;;12990:21;13014:17;;;;;;;;;;;13052:23;;;;13044:74;;;;-1:-1:-1;;;13044:74:0;;13086:2:1;13044:74:0;;;13068:21:1;13125:2;13105:18;;;13098:30;13164:34;13144:18;;;13137:62;-1:-1:-1;;;13215:18:1;;;13208:36;13261:19;;13044:74:0;12884:402:1;13044:74:0;-1:-1:-1;;;;;13158:17:0;;;:9;:17;;;;;;;;;;;13178:22;;;13158:42;;13226:20;;;;;;;;:30;;13194:6;;13158:9;13226:30;;13194:6;;13226:30;:::i;:::-;;;;;;;;13295:9;-1:-1:-1;;;;;13278:35:0;13287:6;-1:-1:-1;;;;;13278:35:0;;13306:6;13278:35;;;;1361:25:1;;1349:2;1334:18;;1215:177;13278:35:0;;;;;;;;12742:644;12613:773;;;:::o;14:548:1:-;126:4;155:2;184;173:9;166:21;216:6;210:13;259:6;254:2;243:9;239:18;232:34;284:1;294:140;308:6;305:1;302:13;294:140;;;403:14;;;399:23;;393:30;369:17;;;388:2;365:26;358:66;323:10;;294:140;;;298:3;483:1;478:2;469:6;458:9;454:22;450:31;443:42;553:2;546;542:7;537:2;529:6;525:15;521:29;510:9;506:45;502:54;494:62;;;;14:548;;;;:::o;567:131::-;-1:-1:-1;;;;;642:31:1;;632:42;;622:70;;688:1;685;678:12;703:315;771:6;779;832:2;820:9;811:7;807:23;803:32;800:52;;;848:1;845;838:12;800:52;887:9;874:23;906:31;931:5;906:31;:::i;:::-;956:5;1008:2;993:18;;;;980:32;;-1:-1:-1;;;703:315:1:o;1397:456::-;1474:6;1482;1490;1543:2;1531:9;1522:7;1518:23;1514:32;1511:52;;;1559:1;1556;1549:12;1511:52;1598:9;1585:23;1617:31;1642:5;1617:31;:::i;:::-;1667:5;-1:-1:-1;1724:2:1;1709:18;;1696:32;1737:33;1696:32;1737:33;:::i;:::-;1397:456;;1789:7;;-1:-1:-1;;;1843:2:1;1828:18;;;;1815:32;;1397:456::o;2047:247::-;2106:6;2159:2;2147:9;2138:7;2134:23;2130:32;2127:52;;;2175:1;2172;2165:12;2127:52;2214:9;2201:23;2233:31;2258:5;2233:31;:::i;2507:388::-;2575:6;2583;2636:2;2624:9;2615:7;2611:23;2607:32;2604:52;;;2652:1;2649;2642:12;2604:52;2691:9;2678:23;2710:31;2735:5;2710:31;:::i;:::-;2760:5;-1:-1:-1;2817:2:1;2802:18;;2789:32;2830:33;2789:32;2830:33;:::i;:::-;2882:7;2872:17;;;2507:388;;;;;:::o;2900:380::-;2979:1;2975:12;;;;3022;;;3043:61;;3097:4;3089:6;3085:17;3075:27;;3043:61;3150:2;3142:6;3139:14;3119:18;3116:38;3113:161;;3196:10;3191:3;3187:20;3184:1;3177:31;3231:4;3228:1;3221:15;3259:4;3256:1;3249:15;3113:161;;2900:380;;;:::o;3694:356::-;3896:2;3878:21;;;3915:18;;;3908:30;3974:34;3969:2;3954:18;;3947:62;4041:2;4026:18;;3694:356::o;4055:127::-;4116:10;4111:3;4107:20;4104:1;4097:31;4147:4;4144:1;4137:15;4171:4;4168:1;4161:15;4187:125;4252:9;;;4273:10;;;4270:36;;;4286:18;;:::i;6345:127::-;6406:10;6401:3;6397:20;6394:1;6387:31;6437:4;6434:1;6427:15;6461:4;6458:1;6451:15;6477:127;6538:10;6533:3;6529:20;6526:1;6519:31;6569:4;6566:1;6559:15;6593:4;6590:1;6583:15;6609:251;6679:6;6732:2;6720:9;6711:7;6707:23;6703:32;6700:52;;;6748:1;6745;6738:12;6700:52;6780:9;6774:16;6799:31;6824:5;6799:31;:::i;6865:217::-;6905:1;6931;6921:132;;6975:10;6970:3;6966:20;6963:1;6956:31;7010:4;7007:1;7000:15;7038:4;7035:1;7028:15;6921:132;-1:-1:-1;7067:9:1;;6865:217::o;7087:259::-;-1:-1:-1;;;7289:24:1;;7338:1;7329:11;;7087:259::o;7351:168::-;7391:7;7457:1;7453;7449:6;7445:14;7442:1;7439:21;7434:1;7427:9;7420:17;7416:45;7413:71;;;7464:18;;:::i;:::-;-1:-1:-1;7504:9:1;;7351:168::o;8308:461::-;8361:3;8399:5;8393:12;8426:6;8421:3;8414:19;8452:4;8481:2;8476:3;8472:12;8465:19;;8518:2;8511:5;8507:14;8539:1;8549:195;8563:6;8560:1;8557:13;8549:195;;;8628:13;;-1:-1:-1;;;;;8624:39:1;8612:52;;8684:12;;;;8719:15;;;;8660:1;8578:9;8549:195;;;-1:-1:-1;8760:3:1;;8308:461;-1:-1:-1;;;;;8308:461:1:o;8774:332::-;8981:6;8970:9;8963:25;9024:2;9019;9008:9;9004:18;8997:30;8944:4;9044:56;9096:2;9085:9;9081:18;9073:6;9044:56;:::i;:::-;9036:64;8774:332;-1:-1:-1;;;;8774:332:1:o;9111:1105::-;9206:6;9237:2;9280;9268:9;9259:7;9255:23;9251:32;9248:52;;;9296:1;9293;9286:12;9248:52;9329:9;9323:16;9358:18;9399:2;9391:6;9388:14;9385:34;;;9415:1;9412;9405:12;9385:34;9453:6;9442:9;9438:22;9428:32;;9498:7;9491:4;9487:2;9483:13;9479:27;9469:55;;9520:1;9517;9510:12;9469:55;9549:2;9543:9;9571:2;9567;9564:10;9561:36;;;9577:18;;:::i;:::-;9623:2;9620:1;9616:10;9655:2;9649:9;9718:2;9714:7;9709:2;9705;9701:11;9697:25;9689:6;9685:38;9773:6;9761:10;9758:22;9753:2;9741:10;9738:18;9735:46;9732:72;;;9784:18;;:::i;:::-;9820:2;9813:22;9870:18;;;9904:15;;;;-1:-1:-1;9946:11:1;;;9942:20;;;9974:19;;;9971:39;;;10006:1;10003;9996:12;9971:39;10030:11;;;;10050:135;10066:6;10061:3;10058:15;10050:135;;;10132:10;;10120:23;;10083:12;;;;10163;;;;10050:135;;;10204:6;9111:1105;-1:-1:-1;;;;;;;;9111:1105:1:o;10221:582::-;10520:6;10509:9;10502:25;10563:6;10558:2;10547:9;10543:18;10536:34;10606:3;10601:2;10590:9;10586:18;10579:31;10483:4;10627:57;10679:3;10668:9;10664:19;10656:6;10627:57;:::i;:::-;-1:-1:-1;;;;;10720:32:1;;;;10715:2;10700:18;;10693:60;-1:-1:-1;10784:3:1;10769:19;10762:35;10619:65;10221:582;-1:-1:-1;;;10221:582:1:o;10808:128::-;10875:9;;;10896:11;;;10893:37;;;10910:18;;:::i;11553:306::-;11641:6;11649;11657;11710:2;11698:9;11689:7;11685:23;11681:32;11678:52;;;11726:1;11723;11716:12;11678:52;11755:9;11749:16;11739:26;;11805:2;11794:9;11790:18;11784:25;11774:35;;11849:2;11838:9;11834:18;11828:25;11818:35;;11553:306;;;;;:::o

Swarm Source

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