ETH Price: $3,513.15 (+4.73%)

Token

Murmur Tools (BABBLE)
 

Overview

Max Total Supply

1,000,000,000 BABBLE

Holders

81

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

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

Contract Source Code Verified (Exact Match)

Contract Name:
MurmurTools

Compiler Version
v0.8.13+commit.abaa5c0e

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-09-12
*/

/* ERC-20 */
// SPDX-License-Identifier: MIT

/*

Murmur Tools
Babble Analytics
Advanced Memecoin Defi Tools



Website:
https://murmur.tools/

Telegram:
https://t.me/MurmurGate

Medium:
https://medium.com/@murmurbabble


*/

pragma solidity 0.8.13;

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

   function _msgData() internal view virtual returns (bytes calldata) {
      this; // - silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
      return msg.data;
   }
}

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

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 cal ler's tokens.
    *
    * Returns a boolean value indicating whether the op eration succeeded.
    *
    * IMPORTANT: Beware that changing an allowan ce 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 spe nder's allowance to 0 and set the
    * desired valu  afterwards:
    * https://github.co m/ethereum/EIPs/issues/20#issuecomment-263524729
    *
    * Emits an {Approval} event.
    */
   function approve(address spender, uint256 amount) external returns (bool);

   /**
    * @dev Moves `amount` toke ns from `sender` to `recipient` using the
    * allowance mechanism. `am ount` 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 `v alue` tokens are moved from one account (`from`) to
    * anot her (`to`).
    *
    * Note that `value` may be zero.
    */
   event Transfer(address indexed from, address indexed to, uint256 value);

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

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

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

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

   string private _name;
   string private _symbol;
   uint256 private _totalSupply;

   constructor(string memory name_, string memory symbol_) {
      _name = name_;
      _symbol = symbol_;
   }

   function name() public view virtual override returns (string memory) {
      return _name;
   }

   function symbol() public view virtual override returns (string memory) {
      return _symbol;
   }

   function decimals() public view virtual override returns (uint8) {
      return 18;
   }

   function totalSupply() public view virtual override returns (uint256) {
      return _totalSupply;
   }

   function balanceOf(address account)
      public
      view
      virtual
      override
      returns (uint256)
   {
      return _balances[account];
   }

   function transfer(address recipient, uint256 amount)
      public
      virtual
      override
      returns (bool)
   {
      _transfer(_msgSender(), recipient, amount);
      return true;
   }

   function allowance(address owner, address spender)
      public
      view
      virtual
      override
      returns (uint256)
   {
      return _allowances[owner][spender];
   }

   function approve(address spender, uint256 amount)
      public
      virtual
      override
      returns (bool)
   {
      _approve(_msgSender(), spender, amount);
      return true;
   }

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

   function increaseAllowance(address spender, uint256 addedValue)
      public
      virtual
      returns (bool)
   {
      _approve(
         _msgSender(),
         spender,
         _allowances[_msgSender()][spender] + addedValue
      );
      return true;
   }

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

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

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

   function _createInitialSupply(address account, uint256 amount)
      internal
      virtual
   {
      require(account != address(0), "ERC20: mint to the zero address");
      _totalSupply += amount;
      _balances[account] += amount;
      emit Transfer(address(0), account, amount);
   }

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

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

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

   /**
    * @dev Returns the subtraction of two unsigned integers, reverting with custom message on
    * overflow (when the result is negative).
    *
    * Counterpart to Solidity's `-` operator.
    *
    * Requirements:
    *
    * - Subtraction cannot overflow.
    */

   function sub(
      uint256 a,
      uint256 b,
      string memory errorMessage
   ) internal pure returns (uint256) {
      require(b <= a, errorMessage);
      uint256 c = a - b;

      return c;
   }

   /**
    * @dev Returns the multiplication of two unsigned integers, reverting on
    * overflow.
    *
    * Counterpart to Solidity's `*` operator.
    *
    * Requirements:
    *
    * - Multiplication cannot overflow.
    */
   function mul(uint256 a, uint256 b) internal pure returns (uint256) {
      // - Gas optimization: this is cheaper than requiring 'a' not being zero, but the
      // - benefit is lost if 'b' is also tested.
      // - See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
      if (a == 0) {
         return 0;
      }

      uint256 c = a * b;
      require(c / a == b, "SafeMath: multiplication overflow");

      return c;
   }

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

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

      return c;
   }

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

   /**
    * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
    * Reverts with custom message when dividing by zero.
    *
    * Counterpart to Solidity's `%` operator. This function uses a `revert`
    * opcode (which leaves remaining gas untouched) while Solidity uses an
    * invalid opcode to revert (consuming all remaining gas).
    *
    * Requirements:
    *
    * - The divisor cannot be zero.
    */
   function mod(
      uint256 a,
      uint256 b,
      string memory errorMessage
   ) internal pure returns (uint256) {
      require(b != 0, errorMessage);
      return a % b;
   }
}
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() {
      address msgSender = _msgSender();
      _owner = msgSender;
      emit OwnershipTransferred(address(0), msgSender);
   }

   /**
    * @dev Returns the address of the current owner.
    */
   function owner() public view 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 {
      emit OwnershipTransferred(_owner, address(0));
      _owner = 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"
      );
      emit OwnershipTransferred(_owner, newOwner);
      _owner = newOwner;
   }
}

library SafeMathInt {
   int256 private constant MIN_INT256 = int256(1) << 255;
   int256 private constant MAX_INT256 = ~(int256(1) << 255);

   /**
    * @dev Multiplies two int256 variables and fails on overflow.
    */
   function mul(int256 a, int256 b) internal pure returns (int256) {
      int256 c = a * b;

      // - Detect overflow when multiplying MIN_INT256 with -1
      require(c != MIN_INT256 || (a & MIN_INT256) != (b & MIN_INT256));
      require((b == 0) || (c / b == a));
      return c;
   }

   /**
    * @dev Division of two int256 variables and fails on overflow.
    */
   function div(int256 a, int256 b) internal pure returns (int256) {
      // - Prevent overflow when dividing MIN_INT256 by -1
      require(b != -1 || a != MIN_INT256);

      // - Solidity already throws when dividing by 0.
      return a / b;
   }

   /**
    * @dev Subtracts two int256 variables and fails on overflow.
    */
   function sub(int256 a, int256 b) internal pure returns (int256) {
      int256 c = a - b;
      require((b >= 0 && c <= a) || (b < 0 && c > a));
      return c;
   }

   /**
    * @dev Adds two int256 variables and fails on overflow.
    */
   function add(int256 a, int256 b) internal pure returns (int256) {
      int256 c = a + b;
      require((b >= 0 && c >= a) || (b < 0 && c < a));
      return c;
   }

   /**
    * @dev Converts to absolute value, and fails on overflow.
    */
   function abs(int256 a) internal pure returns (int256) {
      require(a != MIN_INT256);
      return a < 0 ? -a : a;
   }

   function toUint256Safe(int256 a) internal pure returns (uint256) {
      require(a >= 0);
      return uint256(a);
   }
}

library SafeMathUint {
   function toInt256Safe(uint256 a) internal pure returns (int256) {
      int256 b = int256(a);
      require(b >= 0);
      return b;
   }
}

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

   function WETH() external pure returns (address);

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

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

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

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

   function removeLiquidityWithPermit(
      address tokenA,
      address tokenB,
      uint256 liquidity,
      uint256 amountAMin,
      uint256 amountBMin,
      address to,
      uint256 deadline,
      bool approveMax,
      uint8 v,
      bytes32 r,
      bytes32 s
   ) external returns (uint256 amountA, uint256 amountB);

   function removeLiquidityETHWithPermit(
      address token,
      uint256 liquidity,
      uint256 amountTokenMin,
      uint256 amountETHMin,
      address to,
      uint256 deadline,
      bool approveMax,
      uint8 v,
      bytes32 r,
      bytes32 s
   ) external returns (uint256 amountToken, uint256 amountETH);

   function swapExactTokensForTokens(
      uint256 amountIn,
      uint256 amountOutMin,
      address[] calldata path,
      address to,
      uint256 deadline
   ) external returns (uint256[] memory amounts);

   function swapTokensForExactTokens(
      uint256 amountOut,
      uint256 amountInMax,
      address[] calldata path,
      address to,
      uint256 deadline
   ) external returns (uint256[] memory amounts);

   function swapExactETHForTokens(
      uint256 amountOutMin,
      address[] calldata path,
      address to,
      uint256 deadline
   ) external payable returns (uint256[] memory amounts);

   function swapTokensForExactETH(
      uint256 amountOut,
      uint256 amountInMax,
      address[] calldata path,
      address to,
      uint256 deadline
   ) external returns (uint256[] memory amounts);

   function swapExactTokensForETH(
      uint256 amountIn,
      uint256 amountOutMin,
      address[] calldata path,
      address to,
      uint256 deadline
   ) external returns (uint256[] memory amounts);

   function swapETHForExactTokens(
      uint256 amountOut,
      address[] calldata path,
      address to,
      uint256 deadline
   ) external payable returns (uint256[] memory amounts);

   function quote(
      uint256 amountA,
      uint256 reserveA,
      uint256 reserveB
   ) external pure returns (uint256 amountB);

   function getAmountOut(
      uint256 amountIn,
      uint256 reserveIn,
      uint256 reserveOut
   ) external pure returns (uint256 amountOut);

   function getAmountIn(
      uint256 amountOut,
      uint256 reserveIn,
      uint256 reserveOut
   ) external pure returns (uint256 amountIn);

   function getAmountsOut(uint256 amountIn, address[] calldata path)
      external
      view
      returns (uint256[] memory amounts);

   function getAmountsIn(uint256 amountOut, address[] calldata path)
      external
      view
      returns (uint256[] memory amounts);
}

interface IUniswapV2Router02 is IUniswapV2Router01 {
   function removeLiquidityETHSupportingFeeOnTransferTokens(
      address token,
      uint256 liquidity,
      uint256 amountTokenMin,
      uint256 amountETHMin,
      address to,
      uint256 deadline
   ) external returns (uint256 amountETH);

   function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(
      address token,
      uint256 liquidity,
      uint256 amountTokenMin,
      uint256 amountETHMin,
      address to,
      uint256 deadline,
      bool approveMax,
      uint8 v,
      bytes32 r,
      bytes32 s
   ) external returns (uint256 amountETH);

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

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

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

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

   IUniswapV2Router02 public immutable uniswapV2Router;
   address public immutable uniswapV2Pair;

   bool private swapping;

   uint256 public liquidityActiveBlock = 0; // - 0 means liquidity is not active yet
   uint256 public tradingActiveBlock = 0; // - 0 means trading is not active

   uint256 public swapTokensAtAmount;
   uint256 public maxTransactionAmount;

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

   mapping(address => uint256) public _mevBlock;

   address public constant burnWallet =
      0x000000000000000000000000000000000000dEaD;
   address public marketingWallet = 0x799628E1273584027ec7105E50C8F469dBb90930;

   uint256 public constant feeDivisor = 1000;

   uint256 public marketingBuyFee;
   uint256 public totalBuyFees;

   uint256 public marketingSellFee;
   uint256 public totalSellFees;

   uint256 public tokensForFees;
   uint256 public tokensForMarketing;

   bool public transferDelayEnabled = true;
   uint256 public maxWallet;

   mapping(address => bool) private _blacklist;

   mapping(address => bool) private _isExcludedFromFees;
   mapping(address => bool) public _isExcludedMaxTransactionAmount;

   mapping(address => bool) public automatedMarketMakerPairs;

   mapping(address => uint256) public _earlyBuyer;

   event ExcludeFromFees(address indexed account, bool isExcluded);
   event ExcludeMultipleAccountsFromFees(address[] accounts, bool isExcluded);

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

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

   constructor() ERC20("Murmur Tools", "BABBLE") {
      uint256 totalSupply = 1 * 1e9 * 1e18;

      swapTokensAtAmount = (totalSupply * 1) / 10000; // - 0.01% swap tokens amount
      maxTransactionAmount = (totalSupply * 10) / 1000; // - 1% maxTransactionAmountTxn
      maxWallet = (totalSupply * 30) / 1000; // - 3% maxWallet

      marketingBuyFee = 30; // - 3%
      totalBuyFees = marketingBuyFee; // - 2%

      marketingSellFee = 40; // - 4%
      totalSellFees = marketingSellFee;

      IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(
         0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D
      );

      // - Create a uniswap pair for this new token
      address _uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory())
         .createPair(address(this), _uniswapV2Router.WETH());

      uniswapV2Router = _uniswapV2Router;
      uniswapV2Pair = _uniswapV2Pair;

      _setAutomatedMarketMakerPair(_uniswapV2Pair, true);

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

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

      _createInitialSupply(address(owner()), totalSupply);
   }

   receive() external payable {}

   function enableTrading() external onlyOwner {
      require(!tradingActive, "Cannot re-enable trading!");
      tradingActive = true;
      swapEnabled = true;
      tradingActiveBlock = block.number;
   }

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

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

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

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

   function updateSellFees(uint256 _marketingSellFee) external onlyOwner {
      marketingSellFee = _marketingSellFee;
      totalSellFees = marketingSellFee;
      require(totalSellFees <= 50, "Must keep fees at 5% or less");
   }

   function updateBuyFees(uint256 _marketingBuyFee) external onlyOwner {
      marketingBuyFee = _marketingBuyFee;
      totalBuyFees = marketingBuyFee;
      require(totalSellFees <= 50, "Must keep fees at 5% or less");
   }

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

      emit ExcludeFromFees(account, excluded);
   }

   function excludeMultipleAccountsFromFees(
      address[] calldata accounts,
      bool excluded
   ) external onlyOwner {
      for (uint256 i = 0; i < accounts.length; i++) {
         _isExcludedFromFees[accounts[i]] = excluded;
      }

      emit ExcludeMultipleAccountsFromFees(accounts, excluded);
   }

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

      _setAutomatedMarketMakerPair(pair, value);
   }

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

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

   function _transfer(
      address from,
      address to,
      uint256 amount
   ) internal override {
      require(from != address(0), "ERC20: transfer from the zero address");
      require(to != address(0), "ERC20: transfer to the zero address");
      require(
         !_blacklist[to] && !_blacklist[from],
         "You have been blacklisted from transfering tokens"
      );

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

      if (!tradingActive) {
         require(
            _isExcludedFromFees[from] || _isExcludedFromFees[to],
            "Trading is not active yet."
         );
      }

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

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

      uint256 contractTokenBalance = balanceOf(address(this));
      bool canSwap = contractTokenBalance >= swapTokensAtAmount;

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

      bool takeFee = !swapping;

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

      uint256 fees = 0;

      // - no taxes on transfers (non buys/sells)
      if (takeFee) {
         // - on sell take fees, purchase token and burn it
         if (automatedMarketMakerPairs[to] && totalSellFees > 0) {
            fees = amount.mul(totalSellFees).div(feeDivisor);
            tokensForFees += fees;
            tokensForMarketing += (fees * marketingSellFee) / totalSellFees;
         }
         // - on buy
         else if (automatedMarketMakerPairs[from]) {
            fees = amount.mul(totalBuyFees).div(feeDivisor);
            tokensForFees += fees;
            tokensForMarketing += (fees * marketingBuyFee) / totalBuyFees;
         }

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

         amount -= fees;
      }


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

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

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

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

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

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

   function manualSwap() external onlyOwner {
      uint256 contractBalance = balanceOf(address(this));
      swapTokensForEth(contractBalance);
   }

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

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

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

      uint256 amountToSwapForETH = contractBalance;
      swapTokensForEth(amountToSwapForETH);

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

      tokensForMarketing = 0;
      tokensForFees = 0;
   }

   function changeAccountStatus(address[] memory bots_, bool status)
      public
      onlyOwner
   {
      for (uint256 i = 0; i < bots_.length; i++) {
         _blacklist[bots_[i]] = status;
      }
   }

   function withdrawStuckEth() external onlyOwner {
      (bool success, ) = address(msg.sender).call{
         value: address(this).balance
      }("");
      require(success, "failed to withdraw");
   }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address[]","name":"accounts","type":"address[]"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeMultipleAccountsFromFees","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethReceived","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokensIntoLiqudity","type":"uint256"}],"name":"SwapAndLiquify","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_earlyBuyer","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_mevBlock","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":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"burnWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"bots_","type":"address[]"},{"internalType":"bool","name":"status","type":"bool"}],"name":"changeAccountStatus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransaction","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeMultipleAccountsFromFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"feeDivisor","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"liquidityActiveBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"manualSwap","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"marketingBuyFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingSellFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxTransactionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokensForMarketing","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalBuyFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSellFees","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActiveBlock","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":[],"name":"transferDelayEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingBuyFee","type":"uint256"}],"name":"updateBuyFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxTxnAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_marketingSellFee","type":"uint256"}],"name":"updateSellFees","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"name":"updateSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawStuckEth","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c060405260006006819055600755600a805462ffffff1916610100179055600c80546001600160a01b03191673799628e1273584027ec7105e50c8f469dbb909301790556013805460ff191660011790553480156200005e57600080fd5b50604080518082018252600c81526b4d75726d757220546f6f6c7360a01b602080830191825283518085019094526006845265424142424c4560d01b908401528151919291620000b1916002916200066b565b508051620000c79060039060208401906200066b565b5050506000620000dc6200040a60201b60201c565b600580546001600160a01b0319166001600160a01b038316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3506b033b2e3c9fd0803ce80000006127106200014782600162000727565b62000153919062000749565b6008556103e86200016682600a62000727565b62000172919062000749565b6009556103e86200018582601e62000727565b62000191919062000749565b601455601e600d819055600e556028600f8190556010556040805163c45a015560e01b81529051737a250d5630b4cf539739df2c5dacb4c659f2488d91600091839163c45a01559160048281019260209291908290030181865afa158015620001fe573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200022491906200076c565b6001600160a01b031663c9c6539630846001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000272573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200029891906200076c565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015620002e6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200030c91906200076c565b6001600160a01b03808416608052811660a05290506200032e8160016200040e565b6200034d620003456005546001600160a01b031690565b600162000462565b6200035a30600162000462565b6200036961dead600162000462565b6200037682600162000462565b600c546200038f906001600160a01b0316600162000462565b620003ae620003a66005546001600160a01b031690565b600162000510565b620003bb30600162000510565b620003ca61dead600162000510565b600c54620003e3906001600160a01b0316600162000510565b62000401620003fa6005546001600160a01b031690565b8462000586565b505050620007f5565b3390565b6001600160a01b038216600081815260186020526040808220805460ff191685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b6005546001600160a01b03163314620004b15760405162461bcd60e51b81526020600482018190526024820152600080516020620031a883398151915260448201526064015b60405180910390fd5b6001600160a01b038216600081815260166020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546001600160a01b031633146200055b5760405162461bcd60e51b81526020600482018190526024820152600080516020620031a88339815191526044820152606401620004a8565b6001600160a01b03919091166000908152601760205260409020805460ff1916911515919091179055565b6001600160a01b038216620005de5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401620004a8565b8060046000828254620005f291906200079e565b90915550506001600160a01b03821660009081526020819052604081208054839290620006219084906200079e565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b8280546200067990620007b9565b90600052602060002090601f0160209004810192826200069d5760008555620006e8565b82601f10620006b857805160ff1916838001178555620006e8565b82800160010185558215620006e8579182015b82811115620006e8578251825591602001919060010190620006cb565b50620006f6929150620006fa565b5090565b5b80821115620006f65760008155600101620006fb565b634e487b7160e01b600052601160045260246000fd5b600081600019048311821515161562000744576200074462000711565b500290565b6000826200076757634e487b7160e01b600052601260045260246000fd5b500490565b6000602082840312156200077f57600080fd5b81516001600160a01b03811681146200079757600080fd5b9392505050565b60008219821115620007b457620007b462000711565b500190565b600181811c90821680620007ce57607f821691505b602082108103620007ef57634e487b7160e01b600052602260045260246000fd5b50919050565b60805160a0516129716200083760003960008181610582015261108901526000818161041501528181611ed901528181611f920152611fce01526129716000f3fe60806040526004361061031e5760003560e01c80637571336a116101ab578063bbc0c742116100f7578063dd62ed3e11610095578063eba4c3331161006f578063eba4c33314610972578063ee40166e14610992578063f2fde38b146109a8578063f8b45b05146109c857600080fd5b8063dd62ed3e14610900578063e2f4560514610946578063e7f444b31461095c57600080fd5b8063c492f046116100d1578063c492f0461461089a578063c876d0b9146108ba578063c8c8ebe4146108d4578063d0a39814146108ea57600080fd5b8063bbc0c74214610840578063c02466681461085a578063c18bc1951461087a57600080fd5b806395d89b4111610164578063a457c2d71161013e578063a457c2d7146107ba578063a9059cbb146107da578063b62496f5146107fa578063b9e937001461082a57600080fd5b806395d89b411461076f5780639a36f932146107845780639a7a23d61461079a57600080fd5b80637571336a146106c757806375f0a874146106e75780637fa787ba146107075780638a8c523c1461071c5780638da5cb5b14610731578063924de9b71461074f57600080fd5b8063313ce5671161026a57806351bc3c851161022357806370a08231116101fd57806370a0823114610647578063715018a61461067d57806371fc468814610692578063751039fc146106b257600080fd5b806351bc3c85146105fc57806368078952146106115780636ddd17131461062757600080fd5b8063313ce5671461051e578063395093511461053a5780633f8a62041461055a57806349bd5a5e146105705780634a62bb65146105a45780634fbee193146105c357600080fd5b806317533bca116102d7578063203e727e116102b1578063203e727e1461048457806323b872dd146104a457806325fedfb5146104c45780632a3de72e146104f157600080fd5b806317533bca1461043757806318160ddd146104595780631f3fed8f1461046e57600080fd5b8063062287491461032a57806306fdde031461035d578063095ea7b31461037f5780630f4432e3146103af57806310d5de53146103d35780631694505e1461040357600080fd5b3661032557005b600080fd5b34801561033657600080fd5b5061034061dead81565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561036957600080fd5b506103726109de565b6040516103549190612381565b34801561038b57600080fd5b5061039f61039a3660046123fb565b610a70565b6040519015158152602001610354565b3480156103bb57600080fd5b506103c560065481565b604051908152602001610354565b3480156103df57600080fd5b5061039f6103ee366004612427565b60176020526000908152604090205460ff1681565b34801561040f57600080fd5b506103407f000000000000000000000000000000000000000000000000000000000000000081565b34801561044357600080fd5b5061045761045236600461246a565b610a87565b005b34801561046557600080fd5b506004546103c5565b34801561047a57600080fd5b506103c560125481565b34801561049057600080fd5b5061045761049f366004612541565b610b26565b3480156104b057600080fd5b5061039f6104bf36600461255a565b610c03565b3480156104d057600080fd5b506103c56104df366004612427565b600b6020526000908152604090205481565b3480156104fd57600080fd5b506103c561050c366004612427565b60196020526000908152604090205481565b34801561052a57600080fd5b5060405160128152602001610354565b34801561054657600080fd5b5061039f6105553660046123fb565b610cad565b34801561056657600080fd5b506103c560115481565b34801561057c57600080fd5b506103407f000000000000000000000000000000000000000000000000000000000000000081565b3480156105b057600080fd5b50600a5461039f90610100900460ff1681565b3480156105cf57600080fd5b5061039f6105de366004612427565b6001600160a01b031660009081526016602052604090205460ff1690565b34801561060857600080fd5b50610457610ce9565b34801561061d57600080fd5b506103c5600d5481565b34801561063357600080fd5b50600a5461039f9062010000900460ff1681565b34801561065357600080fd5b506103c5610662366004612427565b6001600160a01b031660009081526020819052604090205490565b34801561068957600080fd5b50610457610d2f565b34801561069e57600080fd5b506104576106ad366004612541565b610da3565b3480156106be57600080fd5b5061039f610e2a565b3480156106d357600080fd5b506104576106e236600461259b565b610e68565b3480156106f357600080fd5b50600c54610340906001600160a01b031681565b34801561071357600080fd5b50610457610ebd565b34801561072857600080fd5b50610457610f74565b34801561073d57600080fd5b506005546001600160a01b0316610340565b34801561075b57600080fd5b5061045761076a3660046125d0565b611008565b34801561077b57600080fd5b5061037261104e565b34801561079057600080fd5b506103c56103e881565b3480156107a657600080fd5b506104576107b536600461259b565b61105d565b3480156107c657600080fd5b5061039f6107d53660046123fb565b611146565b3480156107e657600080fd5b5061039f6107f53660046123fb565b6111df565b34801561080657600080fd5b5061039f610815366004612427565b60186020526000908152604090205460ff1681565b34801561083657600080fd5b506103c5600e5481565b34801561084c57600080fd5b50600a5461039f9060ff1681565b34801561086657600080fd5b5061045761087536600461259b565b6111ec565b34801561088657600080fd5b50610457610895366004612541565b611275565b3480156108a657600080fd5b506104576108b53660046125eb565b611346565b3480156108c657600080fd5b5060135461039f9060ff1681565b3480156108e057600080fd5b506103c560095481565b3480156108f657600080fd5b506103c560105481565b34801561090c57600080fd5b506103c561091b36600461266f565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b34801561095257600080fd5b506103c560085481565b34801561096857600080fd5b506103c5600f5481565b34801561097e57600080fd5b5061045761098d366004612541565b611422565b34801561099e57600080fd5b506103c560075481565b3480156109b457600080fd5b506104576109c3366004612427565b6114a7565b3480156109d457600080fd5b506103c560145481565b6060600280546109ed906126a8565b80601f0160208091040260200160405190810160405280929190818152602001828054610a19906126a8565b8015610a665780601f10610a3b57610100808354040283529160200191610a66565b820191906000526020600020905b815481529060010190602001808311610a4957829003601f168201915b5050505050905090565b6000610a7d338484611592565b5060015b92915050565b6005546001600160a01b03163314610aba5760405162461bcd60e51b8152600401610ab1906126e2565b60405180910390fd5b60005b8251811015610b21578160156000858481518110610add57610add612717565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff191691151591909117905580610b1981612743565b915050610abd565b505050565b6005546001600160a01b03163314610b505760405162461bcd60e51b8152600401610ab1906126e2565b670de0b6b3a76400006103e8610b6560045490565b610b7090600a61275c565b610b7a919061277b565b610b84919061277b565b811015610beb5760405162461bcd60e51b815260206004820152602f60248201527f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060448201526e6c6f776572207468616e20312e302560881b6064820152608401610ab1565b610bfd81670de0b6b3a764000061275c565b60095550565b6000610c108484846116b6565b6001600160a01b038416600090815260016020908152604080832033845290915290205482811015610c955760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610ab1565b610ca28533858403611592565b506001949350505050565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610a7d918590610ce490869061279d565b611592565b6005546001600160a01b03163314610d135760405162461bcd60e51b8152600401610ab1906126e2565b30600090815260208190526040902054610d2c81611e82565b50565b6005546001600160a01b03163314610d595760405162461bcd60e51b8152600401610ab1906126e2565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b6005546001600160a01b03163314610dcd5760405162461bcd60e51b8152600401610ab1906126e2565b600d819055600e81905560105460321015610d2c5760405162461bcd60e51b815260206004820152601c60248201527f4d757374206b6565702066656573206174203525206f72206c657373000000006044820152606401610ab1565b6005546000906001600160a01b03163314610e575760405162461bcd60e51b8152600401610ab1906126e2565b50600a805461ff0019169055600190565b6005546001600160a01b03163314610e925760405162461bcd60e51b8152600401610ab1906126e2565b6001600160a01b03919091166000908152601760205260409020805460ff1916911515919091179055565b6005546001600160a01b03163314610ee75760405162461bcd60e51b8152600401610ab1906126e2565b604051600090339047908381818185875af1925050503d8060008114610f29576040519150601f19603f3d011682016040523d82523d6000602084013e610f2e565b606091505b5050905080610d2c5760405162461bcd60e51b81526020600482015260126024820152716661696c656420746f20776974686472617760701b6044820152606401610ab1565b6005546001600160a01b03163314610f9e5760405162461bcd60e51b8152600401610ab1906126e2565b600a5460ff1615610ff15760405162461bcd60e51b815260206004820152601960248201527f43616e6e6f742072652d656e61626c652074726164696e6721000000000000006044820152606401610ab1565b600a805462ff00ff19166201000117905543600755565b6005546001600160a01b031633146110325760405162461bcd60e51b8152600401610ab1906126e2565b600a8054911515620100000262ff000019909216919091179055565b6060600380546109ed906126a8565b6005546001600160a01b031633146110875760405162461bcd60e51b8152600401610ab1906126e2565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b0316036111385760405162461bcd60e51b815260206004820152604160248201527f54686520556e697377617020706169722063616e6e6f742062652072656d6f7660448201527f65642066726f6d206175746f6d617465644d61726b65744d616b6572506169726064820152607360f81b608482015260a401610ab1565b6111428282612042565b5050565b3360009081526001602090815260408083206001600160a01b0386168452909152812054828110156111c85760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610ab1565b6111d53385858403611592565b5060019392505050565b6000610a7d3384846116b6565b6005546001600160a01b031633146112165760405162461bcd60e51b8152600401610ab1906126e2565b6001600160a01b038216600081815260166020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546001600160a01b0316331461129f5760405162461bcd60e51b8152600401610ab1906126e2565b670de0b6b3a76400006103e86112b460045490565b6112bf90600a61275c565b6112c9919061277b565b6112d3919061277b565b81101561132e5760405162461bcd60e51b8152602060048201526024808201527f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e20604482015263312e302560e01b6064820152608401610ab1565b61134081670de0b6b3a764000061275c565b60145550565b6005546001600160a01b031633146113705760405162461bcd60e51b8152600401610ab1906126e2565b60005b828110156113e157816016600086868581811061139257611392612717565b90506020020160208101906113a79190612427565b6001600160a01b031681526020810191909152604001600020805460ff1916911515919091179055806113d981612743565b915050611373565b507f7fdaf542373fa84f4ee8d662c642f44e4c2276a217d7d29e548b6eb29a233b35838383604051611415939291906127b5565b60405180910390a1505050565b6005546001600160a01b0316331461144c5760405162461bcd60e51b8152600401610ab1906126e2565b600f81905560108190556032811115610d2c5760405162461bcd60e51b815260206004820152601c60248201527f4d757374206b6565702066656573206174203525206f72206c657373000000006044820152606401610ab1565b6005546001600160a01b031633146114d15760405162461bcd60e51b8152600401610ab1906126e2565b6001600160a01b0381166115365760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610ab1565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b0383166115f45760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610ab1565b6001600160a01b0382166116555760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610ab1565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166116dc5760405162461bcd60e51b8152600401610ab19061280e565b6001600160a01b0382166117025760405162461bcd60e51b8152600401610ab190612853565b6001600160a01b03821660009081526015602052604090205460ff1615801561174457506001600160a01b03831660009081526015602052604090205460ff16155b6117aa5760405162461bcd60e51b815260206004820152603160248201527f596f752068617665206265656e20626c61636b6c69737465642066726f6d207460448201527072616e73666572696e6720746f6b656e7360781b6064820152608401610ab1565b806000036117be57610b2183836000612096565b600a5460ff16611853576001600160a01b03831660009081526016602052604090205460ff168061180757506001600160a01b03821660009081526016602052604090205460ff165b6118535760405162461bcd60e51b815260206004820152601a60248201527f54726164696e67206973206e6f7420616374697665207965742e0000000000006044820152606401610ab1565b600a54610100900460ff1615611bed576005546001600160a01b0384811691161480159061188f57506005546001600160a01b03838116911614155b80156118a357506001600160a01b03821615155b80156118ba57506001600160a01b03821661dead14155b80156118d05750600554600160a01b900460ff16155b15611bed57600a5460ff16611963576001600160a01b03831660009081526016602052604090205460ff168061191e57506001600160a01b03821660009081526016602052604090205460ff165b6119635760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b6044820152606401610ab1565b6001600160a01b03831660009081526018602052604090205460ff1680156119a457506001600160a01b03821660009081526017602052604090205460ff16155b15611a9a576009546119be90670de0b6b3a764000061279d565b811115611a2b5760405162461bcd60e51b815260206004820152603560248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201527436b0bc2a3930b739b0b1ba34b7b720b6b7bab73a1760591b6064820152608401610ab1565b6014546001600160a01b038316600090815260208190526040902054611a51908361279d565b1115611a955760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b6044820152606401610ab1565b611bed565b6001600160a01b03821660009081526018602052604090205460ff168015611adb57506001600160a01b03831660009081526017602052604090205460ff16155b15611b6357600954611af590670de0b6b3a764000061279d565b811115611a955760405162461bcd60e51b815260206004820152603660248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152751036b0bc2a3930b739b0b1ba34b7b720b6b7bab73a1760511b6064820152608401610ab1565b6001600160a01b03821660009081526017602052604090205460ff16611bed576014546001600160a01b038316600090815260208190526040902054611ba9908361279d565b1115611bed5760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b6044820152606401610ab1565b3060009081526020819052604090205460085481108015908190611c195750600a5462010000900460ff165b8015611c2f5750600554600160a01b900460ff16155b8015611c5457506001600160a01b03851660009081526018602052604090205460ff16155b8015611c7957506001600160a01b03851660009081526016602052604090205460ff16155b8015611c9e57506001600160a01b03841660009081526016602052604090205460ff16155b15611ccc576005805460ff60a01b1916600160a01b179055611cbe6121eb565b6005805460ff60a01b191690555b6005546001600160a01b03861660009081526016602052604090205460ff600160a01b909204821615911680611d1a57506001600160a01b03851660009081526016602052604090205460ff165b15611d23575060005b60008115611e6e576001600160a01b03861660009081526018602052604090205460ff168015611d5557506000601054115b15611dca57611d7b6103e8611d756010548861228490919063ffffffff16565b9061230d565b90508060116000828254611d8f919061279d565b9091555050601054600f54611da4908361275c565b611dae919061277b565b60126000828254611dbf919061279d565b90915550611e509050565b6001600160a01b03871660009081526018602052604090205460ff1615611e5057611e066103e8611d75600e548861228490919063ffffffff16565b90508060116000828254611e1a919061279d565b9091555050600e54600d54611e2f908361275c565b611e39919061277b565b60126000828254611e4a919061279d565b90915550505b8015611e6157611e61873083612096565b611e6b8186612896565b94505b611e79878787612096565b50505050505050565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110611eb757611eb7612717565b60200260200101906001600160a01b031690816001600160a01b0316815250507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611f35573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f5991906128ad565b81600181518110611f6c57611f6c612717565b60200260200101906001600160a01b031690816001600160a01b031681525050611fb7307f000000000000000000000000000000000000000000000000000000000000000084611592565b60405163791ac94760e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063791ac9479061200c9085906000908690309042906004016128ca565b600060405180830381600087803b15801561202657600080fd5b505af115801561203a573d6000803e3d6000fd5b505050505050565b6001600160a01b038216600081815260186020526040808220805460ff191685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b6001600160a01b0383166120bc5760405162461bcd60e51b8152600401610ab19061280e565b6001600160a01b0382166120e25760405162461bcd60e51b8152600401610ab190612853565b6001600160a01b0383166000908152602081905260409020548181101561215a5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610ab1565b6001600160a01b0380851660009081526020819052604080822085850390559185168152908120805484929061219190849061279d565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516121dd91815260200190565b60405180910390a350505050565b30600090815260208190526040812054601254909182158061220b575081155b1561221557505050565b8261221f81611e82565b600c546040516001600160a01b03909116904790600081818185875af1925050503d806000811461226c576040519150601f19603f3d011682016040523d82523d6000602084013e612271565b606091505b5050600060128190556011555050505050565b60008260000361229657506000610a81565b60006122a2838561275c565b9050826122af858361277b565b146123065760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610ab1565b9392505050565b600061230683836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506000818361236b5760405162461bcd60e51b8152600401610ab19190612381565b506000612378848661277b565b95945050505050565b600060208083528351808285015260005b818110156123ae57858101830151858201604001528201612392565b818111156123c0576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b0381168114610d2c57600080fd5b80356123f6816123d6565b919050565b6000806040838503121561240e57600080fd5b8235612419816123d6565b946020939093013593505050565b60006020828403121561243957600080fd5b8135612306816123d6565b634e487b7160e01b600052604160045260246000fd5b803580151581146123f657600080fd5b6000806040838503121561247d57600080fd5b823567ffffffffffffffff8082111561249557600080fd5b818501915085601f8301126124a957600080fd5b81356020828211156124bd576124bd612444565b8160051b604051601f19603f830116810181811086821117156124e2576124e2612444565b60405292835281830193508481018201928984111561250057600080fd5b948201945b8386101561252557612516866123eb565b85529482019493820193612505565b9650612534905087820161245a565b9450505050509250929050565b60006020828403121561255357600080fd5b5035919050565b60008060006060848603121561256f57600080fd5b833561257a816123d6565b9250602084013561258a816123d6565b929592945050506040919091013590565b600080604083850312156125ae57600080fd5b82356125b9816123d6565b91506125c76020840161245a565b90509250929050565b6000602082840312156125e257600080fd5b6123068261245a565b60008060006040848603121561260057600080fd5b833567ffffffffffffffff8082111561261857600080fd5b818601915086601f83011261262c57600080fd5b81358181111561263b57600080fd5b8760208260051b850101111561265057600080fd5b602092830195509350612666918601905061245a565b90509250925092565b6000806040838503121561268257600080fd5b823561268d816123d6565b9150602083013561269d816123d6565b809150509250929050565b600181811c908216806126bc57607f821691505b6020821081036126dc57634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6000600182016127555761275561272d565b5060010190565b60008160001904831182151516156127765761277661272d565b500290565b60008261279857634e487b7160e01b600052601260045260246000fd5b500490565b600082198211156127b0576127b061272d565b500190565b6040808252810183905260008460608301825b868110156127f85782356127db816123d6565b6001600160a01b03168252602092830192909101906001016127c8565b5080925050508215156020830152949350505050565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b6000828210156128a8576128a861272d565b500390565b6000602082840312156128bf57600080fd5b8151612306816123d6565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b8181101561291a5784516001600160a01b0316835293830193918301916001016128f5565b50506001600160a01b0396909616606085015250505060800152939250505056fea2646970667358221220a3bbc6e67789dc24766b00cf533aff50e56120bb8845a6182628eebbcb4837c164736f6c634300080d00334f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572

Deployed Bytecode

0x60806040526004361061031e5760003560e01c80637571336a116101ab578063bbc0c742116100f7578063dd62ed3e11610095578063eba4c3331161006f578063eba4c33314610972578063ee40166e14610992578063f2fde38b146109a8578063f8b45b05146109c857600080fd5b8063dd62ed3e14610900578063e2f4560514610946578063e7f444b31461095c57600080fd5b8063c492f046116100d1578063c492f0461461089a578063c876d0b9146108ba578063c8c8ebe4146108d4578063d0a39814146108ea57600080fd5b8063bbc0c74214610840578063c02466681461085a578063c18bc1951461087a57600080fd5b806395d89b4111610164578063a457c2d71161013e578063a457c2d7146107ba578063a9059cbb146107da578063b62496f5146107fa578063b9e937001461082a57600080fd5b806395d89b411461076f5780639a36f932146107845780639a7a23d61461079a57600080fd5b80637571336a146106c757806375f0a874146106e75780637fa787ba146107075780638a8c523c1461071c5780638da5cb5b14610731578063924de9b71461074f57600080fd5b8063313ce5671161026a57806351bc3c851161022357806370a08231116101fd57806370a0823114610647578063715018a61461067d57806371fc468814610692578063751039fc146106b257600080fd5b806351bc3c85146105fc57806368078952146106115780636ddd17131461062757600080fd5b8063313ce5671461051e578063395093511461053a5780633f8a62041461055a57806349bd5a5e146105705780634a62bb65146105a45780634fbee193146105c357600080fd5b806317533bca116102d7578063203e727e116102b1578063203e727e1461048457806323b872dd146104a457806325fedfb5146104c45780632a3de72e146104f157600080fd5b806317533bca1461043757806318160ddd146104595780631f3fed8f1461046e57600080fd5b8063062287491461032a57806306fdde031461035d578063095ea7b31461037f5780630f4432e3146103af57806310d5de53146103d35780631694505e1461040357600080fd5b3661032557005b600080fd5b34801561033657600080fd5b5061034061dead81565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561036957600080fd5b506103726109de565b6040516103549190612381565b34801561038b57600080fd5b5061039f61039a3660046123fb565b610a70565b6040519015158152602001610354565b3480156103bb57600080fd5b506103c560065481565b604051908152602001610354565b3480156103df57600080fd5b5061039f6103ee366004612427565b60176020526000908152604090205460ff1681565b34801561040f57600080fd5b506103407f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b34801561044357600080fd5b5061045761045236600461246a565b610a87565b005b34801561046557600080fd5b506004546103c5565b34801561047a57600080fd5b506103c560125481565b34801561049057600080fd5b5061045761049f366004612541565b610b26565b3480156104b057600080fd5b5061039f6104bf36600461255a565b610c03565b3480156104d057600080fd5b506103c56104df366004612427565b600b6020526000908152604090205481565b3480156104fd57600080fd5b506103c561050c366004612427565b60196020526000908152604090205481565b34801561052a57600080fd5b5060405160128152602001610354565b34801561054657600080fd5b5061039f6105553660046123fb565b610cad565b34801561056657600080fd5b506103c560115481565b34801561057c57600080fd5b506103407f0000000000000000000000007d36832eec1db04bd8227375241f5f4bf5c90fff81565b3480156105b057600080fd5b50600a5461039f90610100900460ff1681565b3480156105cf57600080fd5b5061039f6105de366004612427565b6001600160a01b031660009081526016602052604090205460ff1690565b34801561060857600080fd5b50610457610ce9565b34801561061d57600080fd5b506103c5600d5481565b34801561063357600080fd5b50600a5461039f9062010000900460ff1681565b34801561065357600080fd5b506103c5610662366004612427565b6001600160a01b031660009081526020819052604090205490565b34801561068957600080fd5b50610457610d2f565b34801561069e57600080fd5b506104576106ad366004612541565b610da3565b3480156106be57600080fd5b5061039f610e2a565b3480156106d357600080fd5b506104576106e236600461259b565b610e68565b3480156106f357600080fd5b50600c54610340906001600160a01b031681565b34801561071357600080fd5b50610457610ebd565b34801561072857600080fd5b50610457610f74565b34801561073d57600080fd5b506005546001600160a01b0316610340565b34801561075b57600080fd5b5061045761076a3660046125d0565b611008565b34801561077b57600080fd5b5061037261104e565b34801561079057600080fd5b506103c56103e881565b3480156107a657600080fd5b506104576107b536600461259b565b61105d565b3480156107c657600080fd5b5061039f6107d53660046123fb565b611146565b3480156107e657600080fd5b5061039f6107f53660046123fb565b6111df565b34801561080657600080fd5b5061039f610815366004612427565b60186020526000908152604090205460ff1681565b34801561083657600080fd5b506103c5600e5481565b34801561084c57600080fd5b50600a5461039f9060ff1681565b34801561086657600080fd5b5061045761087536600461259b565b6111ec565b34801561088657600080fd5b50610457610895366004612541565b611275565b3480156108a657600080fd5b506104576108b53660046125eb565b611346565b3480156108c657600080fd5b5060135461039f9060ff1681565b3480156108e057600080fd5b506103c560095481565b3480156108f657600080fd5b506103c560105481565b34801561090c57600080fd5b506103c561091b36600461266f565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b34801561095257600080fd5b506103c560085481565b34801561096857600080fd5b506103c5600f5481565b34801561097e57600080fd5b5061045761098d366004612541565b611422565b34801561099e57600080fd5b506103c560075481565b3480156109b457600080fd5b506104576109c3366004612427565b6114a7565b3480156109d457600080fd5b506103c560145481565b6060600280546109ed906126a8565b80601f0160208091040260200160405190810160405280929190818152602001828054610a19906126a8565b8015610a665780601f10610a3b57610100808354040283529160200191610a66565b820191906000526020600020905b815481529060010190602001808311610a4957829003601f168201915b5050505050905090565b6000610a7d338484611592565b5060015b92915050565b6005546001600160a01b03163314610aba5760405162461bcd60e51b8152600401610ab1906126e2565b60405180910390fd5b60005b8251811015610b21578160156000858481518110610add57610add612717565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff191691151591909117905580610b1981612743565b915050610abd565b505050565b6005546001600160a01b03163314610b505760405162461bcd60e51b8152600401610ab1906126e2565b670de0b6b3a76400006103e8610b6560045490565b610b7090600a61275c565b610b7a919061277b565b610b84919061277b565b811015610beb5760405162461bcd60e51b815260206004820152602f60248201527f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060448201526e6c6f776572207468616e20312e302560881b6064820152608401610ab1565b610bfd81670de0b6b3a764000061275c565b60095550565b6000610c108484846116b6565b6001600160a01b038416600090815260016020908152604080832033845290915290205482811015610c955760405162461bcd60e51b815260206004820152602860248201527f45524332303a207472616e7366657220616d6f756e74206578636565647320616044820152676c6c6f77616e636560c01b6064820152608401610ab1565b610ca28533858403611592565b506001949350505050565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610a7d918590610ce490869061279d565b611592565b6005546001600160a01b03163314610d135760405162461bcd60e51b8152600401610ab1906126e2565b30600090815260208190526040902054610d2c81611e82565b50565b6005546001600160a01b03163314610d595760405162461bcd60e51b8152600401610ab1906126e2565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b6005546001600160a01b03163314610dcd5760405162461bcd60e51b8152600401610ab1906126e2565b600d819055600e81905560105460321015610d2c5760405162461bcd60e51b815260206004820152601c60248201527f4d757374206b6565702066656573206174203525206f72206c657373000000006044820152606401610ab1565b6005546000906001600160a01b03163314610e575760405162461bcd60e51b8152600401610ab1906126e2565b50600a805461ff0019169055600190565b6005546001600160a01b03163314610e925760405162461bcd60e51b8152600401610ab1906126e2565b6001600160a01b03919091166000908152601760205260409020805460ff1916911515919091179055565b6005546001600160a01b03163314610ee75760405162461bcd60e51b8152600401610ab1906126e2565b604051600090339047908381818185875af1925050503d8060008114610f29576040519150601f19603f3d011682016040523d82523d6000602084013e610f2e565b606091505b5050905080610d2c5760405162461bcd60e51b81526020600482015260126024820152716661696c656420746f20776974686472617760701b6044820152606401610ab1565b6005546001600160a01b03163314610f9e5760405162461bcd60e51b8152600401610ab1906126e2565b600a5460ff1615610ff15760405162461bcd60e51b815260206004820152601960248201527f43616e6e6f742072652d656e61626c652074726164696e6721000000000000006044820152606401610ab1565b600a805462ff00ff19166201000117905543600755565b6005546001600160a01b031633146110325760405162461bcd60e51b8152600401610ab1906126e2565b600a8054911515620100000262ff000019909216919091179055565b6060600380546109ed906126a8565b6005546001600160a01b031633146110875760405162461bcd60e51b8152600401610ab1906126e2565b7f0000000000000000000000007d36832eec1db04bd8227375241f5f4bf5c90fff6001600160a01b0316826001600160a01b0316036111385760405162461bcd60e51b815260206004820152604160248201527f54686520556e697377617020706169722063616e6e6f742062652072656d6f7660448201527f65642066726f6d206175746f6d617465644d61726b65744d616b6572506169726064820152607360f81b608482015260a401610ab1565b6111428282612042565b5050565b3360009081526001602090815260408083206001600160a01b0386168452909152812054828110156111c85760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610ab1565b6111d53385858403611592565b5060019392505050565b6000610a7d3384846116b6565b6005546001600160a01b031633146112165760405162461bcd60e51b8152600401610ab1906126e2565b6001600160a01b038216600081815260166020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6005546001600160a01b0316331461129f5760405162461bcd60e51b8152600401610ab1906126e2565b670de0b6b3a76400006103e86112b460045490565b6112bf90600a61275c565b6112c9919061277b565b6112d3919061277b565b81101561132e5760405162461bcd60e51b8152602060048201526024808201527f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e20604482015263312e302560e01b6064820152608401610ab1565b61134081670de0b6b3a764000061275c565b60145550565b6005546001600160a01b031633146113705760405162461bcd60e51b8152600401610ab1906126e2565b60005b828110156113e157816016600086868581811061139257611392612717565b90506020020160208101906113a79190612427565b6001600160a01b031681526020810191909152604001600020805460ff1916911515919091179055806113d981612743565b915050611373565b507f7fdaf542373fa84f4ee8d662c642f44e4c2276a217d7d29e548b6eb29a233b35838383604051611415939291906127b5565b60405180910390a1505050565b6005546001600160a01b0316331461144c5760405162461bcd60e51b8152600401610ab1906126e2565b600f81905560108190556032811115610d2c5760405162461bcd60e51b815260206004820152601c60248201527f4d757374206b6565702066656573206174203525206f72206c657373000000006044820152606401610ab1565b6005546001600160a01b031633146114d15760405162461bcd60e51b8152600401610ab1906126e2565b6001600160a01b0381166115365760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610ab1565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b0383166115f45760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610ab1565b6001600160a01b0382166116555760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610ab1565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383166116dc5760405162461bcd60e51b8152600401610ab19061280e565b6001600160a01b0382166117025760405162461bcd60e51b8152600401610ab190612853565b6001600160a01b03821660009081526015602052604090205460ff1615801561174457506001600160a01b03831660009081526015602052604090205460ff16155b6117aa5760405162461bcd60e51b815260206004820152603160248201527f596f752068617665206265656e20626c61636b6c69737465642066726f6d207460448201527072616e73666572696e6720746f6b656e7360781b6064820152608401610ab1565b806000036117be57610b2183836000612096565b600a5460ff16611853576001600160a01b03831660009081526016602052604090205460ff168061180757506001600160a01b03821660009081526016602052604090205460ff165b6118535760405162461bcd60e51b815260206004820152601a60248201527f54726164696e67206973206e6f7420616374697665207965742e0000000000006044820152606401610ab1565b600a54610100900460ff1615611bed576005546001600160a01b0384811691161480159061188f57506005546001600160a01b03838116911614155b80156118a357506001600160a01b03821615155b80156118ba57506001600160a01b03821661dead14155b80156118d05750600554600160a01b900460ff16155b15611bed57600a5460ff16611963576001600160a01b03831660009081526016602052604090205460ff168061191e57506001600160a01b03821660009081526016602052604090205460ff165b6119635760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b6044820152606401610ab1565b6001600160a01b03831660009081526018602052604090205460ff1680156119a457506001600160a01b03821660009081526017602052604090205460ff16155b15611a9a576009546119be90670de0b6b3a764000061279d565b811115611a2b5760405162461bcd60e51b815260206004820152603560248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201527436b0bc2a3930b739b0b1ba34b7b720b6b7bab73a1760591b6064820152608401610ab1565b6014546001600160a01b038316600090815260208190526040902054611a51908361279d565b1115611a955760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b6044820152606401610ab1565b611bed565b6001600160a01b03821660009081526018602052604090205460ff168015611adb57506001600160a01b03831660009081526017602052604090205460ff16155b15611b6357600954611af590670de0b6b3a764000061279d565b811115611a955760405162461bcd60e51b815260206004820152603660248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152751036b0bc2a3930b739b0b1ba34b7b720b6b7bab73a1760511b6064820152608401610ab1565b6001600160a01b03821660009081526017602052604090205460ff16611bed576014546001600160a01b038316600090815260208190526040902054611ba9908361279d565b1115611bed5760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b6044820152606401610ab1565b3060009081526020819052604090205460085481108015908190611c195750600a5462010000900460ff165b8015611c2f5750600554600160a01b900460ff16155b8015611c5457506001600160a01b03851660009081526018602052604090205460ff16155b8015611c7957506001600160a01b03851660009081526016602052604090205460ff16155b8015611c9e57506001600160a01b03841660009081526016602052604090205460ff16155b15611ccc576005805460ff60a01b1916600160a01b179055611cbe6121eb565b6005805460ff60a01b191690555b6005546001600160a01b03861660009081526016602052604090205460ff600160a01b909204821615911680611d1a57506001600160a01b03851660009081526016602052604090205460ff165b15611d23575060005b60008115611e6e576001600160a01b03861660009081526018602052604090205460ff168015611d5557506000601054115b15611dca57611d7b6103e8611d756010548861228490919063ffffffff16565b9061230d565b90508060116000828254611d8f919061279d565b9091555050601054600f54611da4908361275c565b611dae919061277b565b60126000828254611dbf919061279d565b90915550611e509050565b6001600160a01b03871660009081526018602052604090205460ff1615611e5057611e066103e8611d75600e548861228490919063ffffffff16565b90508060116000828254611e1a919061279d565b9091555050600e54600d54611e2f908361275c565b611e39919061277b565b60126000828254611e4a919061279d565b90915550505b8015611e6157611e61873083612096565b611e6b8186612896565b94505b611e79878787612096565b50505050505050565b6040805160028082526060820183526000926020830190803683370190505090503081600081518110611eb757611eb7612717565b60200260200101906001600160a01b031690816001600160a01b0316815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015611f35573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f5991906128ad565b81600181518110611f6c57611f6c612717565b60200260200101906001600160a01b031690816001600160a01b031681525050611fb7307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84611592565b60405163791ac94760e01b81526001600160a01b037f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d169063791ac9479061200c9085906000908690309042906004016128ca565b600060405180830381600087803b15801561202657600080fd5b505af115801561203a573d6000803e3d6000fd5b505050505050565b6001600160a01b038216600081815260186020526040808220805460ff191685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b6001600160a01b0383166120bc5760405162461bcd60e51b8152600401610ab19061280e565b6001600160a01b0382166120e25760405162461bcd60e51b8152600401610ab190612853565b6001600160a01b0383166000908152602081905260409020548181101561215a5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610ab1565b6001600160a01b0380851660009081526020819052604080822085850390559185168152908120805484929061219190849061279d565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516121dd91815260200190565b60405180910390a350505050565b30600090815260208190526040812054601254909182158061220b575081155b1561221557505050565b8261221f81611e82565b600c546040516001600160a01b03909116904790600081818185875af1925050503d806000811461226c576040519150601f19603f3d011682016040523d82523d6000602084013e612271565b606091505b5050600060128190556011555050505050565b60008260000361229657506000610a81565b60006122a2838561275c565b9050826122af858361277b565b146123065760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610ab1565b9392505050565b600061230683836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506000818361236b5760405162461bcd60e51b8152600401610ab19190612381565b506000612378848661277b565b95945050505050565b600060208083528351808285015260005b818110156123ae57858101830151858201604001528201612392565b818111156123c0576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b0381168114610d2c57600080fd5b80356123f6816123d6565b919050565b6000806040838503121561240e57600080fd5b8235612419816123d6565b946020939093013593505050565b60006020828403121561243957600080fd5b8135612306816123d6565b634e487b7160e01b600052604160045260246000fd5b803580151581146123f657600080fd5b6000806040838503121561247d57600080fd5b823567ffffffffffffffff8082111561249557600080fd5b818501915085601f8301126124a957600080fd5b81356020828211156124bd576124bd612444565b8160051b604051601f19603f830116810181811086821117156124e2576124e2612444565b60405292835281830193508481018201928984111561250057600080fd5b948201945b8386101561252557612516866123eb565b85529482019493820193612505565b9650612534905087820161245a565b9450505050509250929050565b60006020828403121561255357600080fd5b5035919050565b60008060006060848603121561256f57600080fd5b833561257a816123d6565b9250602084013561258a816123d6565b929592945050506040919091013590565b600080604083850312156125ae57600080fd5b82356125b9816123d6565b91506125c76020840161245a565b90509250929050565b6000602082840312156125e257600080fd5b6123068261245a565b60008060006040848603121561260057600080fd5b833567ffffffffffffffff8082111561261857600080fd5b818601915086601f83011261262c57600080fd5b81358181111561263b57600080fd5b8760208260051b850101111561265057600080fd5b602092830195509350612666918601905061245a565b90509250925092565b6000806040838503121561268257600080fd5b823561268d816123d6565b9150602083013561269d816123d6565b809150509250929050565b600181811c908216806126bc57607f821691505b6020821081036126dc57634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6000600182016127555761275561272d565b5060010190565b60008160001904831182151516156127765761277661272d565b500290565b60008261279857634e487b7160e01b600052601260045260246000fd5b500490565b600082198211156127b0576127b061272d565b500190565b6040808252810183905260008460608301825b868110156127f85782356127db816123d6565b6001600160a01b03168252602092830192909101906001016127c8565b5080925050508215156020830152949350505050565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b6000828210156128a8576128a861272d565b500390565b6000602082840312156128bf57600080fd5b8151612306816123d6565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b8181101561291a5784516001600160a01b0316835293830193918301916001016128f5565b50506001600160a01b0396909616606085015250505060800152939250505056fea2646970667358221220a3bbc6e67789dc24766b00cf533aff50e56120bb8845a6182628eebbcb4837c164736f6c634300080d0033

Deployed Bytecode Sourcemap

21592:12225:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22220:86;;;;;;;;;;;;22264:42;22220:86;;;;;-1:-1:-1;;;;;178:32:1;;;160:51;;148:2;133:18;22220:86:0;;;;;;;;4272:97;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;5266:196::-;;;;;;;;;;-1:-1:-1;5266:196:0;;;;;:::i;:::-;;:::i;:::-;;;1584:14:1;;1577:22;1559:41;;1547:2;1532:18;5266:196:0;1419:187:1;21803:39:0;;;;;;;;;;;;;;;;;;;1757:25:1;;;1745:2;1730:18;21803:39:0;1611:177:1;22849:63:0;;;;;;;;;;-1:-1:-1;22849:63:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;21671:51;;;;;;;;;;;;;;;33391:210;;;;;;;;;;-1:-1:-1;33391:210:0;;;;;:::i;:::-;;:::i;:::-;;4581:105;;;;;;;;;;-1:-1:-1;4667:12:0;;4581:105;;22622:33;;;;;;;;;;;;;;;;25243:263;;;;;;;;;;-1:-1:-1;25243:263:0;;;;;:::i;:::-;;:::i;5469:498::-;;;;;;;;;;-1:-1:-1;5469:498:0;;;;;:::i;:::-;;:::i;22168:44::-;;;;;;;;;;-1:-1:-1;22168:44:0;;;;;:::i;:::-;;;;;;;;;;;;;;22985:46;;;;;;;;;;-1:-1:-1;22985:46:0;;;;;:::i;:::-;;;;;;;;;;;;;;4484:90;;;;;;;;;;-1:-1:-1;4484:90:0;;4565:2;4561:36:1;;4549:2;4534:18;4484:90:0;4419:184:1;5974:274:0;;;;;;;;;;-1:-1:-1;5974:274:0;;;;;:::i;:::-;;:::i;22588:28::-;;;;;;;;;;;;;;;;21728:38;;;;;;;;;;;;;;;22090:33;;;;;;;;;;-1:-1:-1;22090:33:0;;;;;;;;;;;27596:125;;;;;;;;;;-1:-1:-1;27596:125:0;;;;;:::i;:::-;-1:-1:-1;;;;;27686:28:0;27664:4;27686:28;;;:19;:28;;;;;;;;;27596:125;32534:149;;;;;;;;;;;;;:::i;22444:30::-;;;;;;;;;;;;;;;;22129:31;;;;;;;;;;-1:-1:-1;22129:31:0;;;;;;;;;;;4693:163;;;;;;;;;;-1:-1:-1;4693:163:0;;;;;:::i;:::-;-1:-1:-1;;;;;4831:18:0;4802:7;4831:18;;;;;;;;;;;;4693:163;13775:143;;;;;;;;;;;;;:::i;26362:226::-;;;;;;;;;;-1:-1:-1;26362:226:0;;;;;:::i;:::-;;:::i;32735:116::-;;;;;;;;;;;;;:::i;25764:159::-;;;;;;;;;;-1:-1:-1;25764:159:0;;;;;:::i;:::-;;:::i;22312:75::-;;;;;;;;;;-1:-1:-1;22312:75:0;;;;-1:-1:-1;;;;;22312:75:0;;;33608:206;;;;;;;;;;;;;:::i;25026:210::-;;;;;;;;;;;;;:::i;13153:76::-;;;;;;;;;;-1:-1:-1;13216:6:0;;-1:-1:-1;;;;;13216:6:0;13153:76;;26019:97;;;;;;;;;;-1:-1:-1;26019:97:0;;;;;:::i;:::-;;:::i;4376:101::-;;;;;;;;;;;;;:::i;22395:41::-;;;;;;;;;;;;22432:4;22395:41;;27105:296;;;;;;;;;;-1:-1:-1;27105:296:0;;;;;:::i;:::-;;:::i;6255:453::-;;;;;;;;;;-1:-1:-1;6255:453:0;;;;;:::i;:::-;;:::i;4863:202::-;;;;;;;;;;-1:-1:-1;4863:202:0;;;;;:::i;:::-;;:::i;22920:57::-;;;;;;;;;;-1:-1:-1;22920:57:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;22480:27;;;;;;;;;;;;;;;;22051:33;;;;;;;;;;-1:-1:-1;22051:33:0;;;;;;;;26595:179;;;;;;;;;;-1:-1:-1;26595:179:0;;;;;:::i;:::-;;:::i;25513:244::-;;;;;;;;;;-1:-1:-1;25513:244:0;;;;;:::i;:::-;;:::i;26781:317::-;;;;;;;;;;-1:-1:-1;26781:317:0;;;;;:::i;:::-;;:::i;22663:39::-;;;;;;;;;;-1:-1:-1;22663:39:0;;;;;;;;22008:35;;;;;;;;;;;;;;;;22552:28;;;;;;;;;;;;;;;;5072:187;;;;;;;;;;-1:-1:-1;5072:187:0;;;;;:::i;:::-;-1:-1:-1;;;;;5225:18:0;;;5196:7;5225:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;5072:187;21969:33;;;;;;;;;;;;;;;;22515:31;;;;;;;;;;;;;;;;26123:232;;;;;;;;;;-1:-1:-1;26123:232:0;;;;;:::i;:::-;;:::i;21889:37::-;;;;;;;;;;;;;;;;14068:266;;;;;;;;;;-1:-1:-1;14068:266:0;;;;;:::i;:::-;;:::i;22708:24::-;;;;;;;;;;;;;;;;4272:97;4326:13;4357:5;4350:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4272:97;:::o;5266:196::-;5377:4;5396:39;386:10;5419:7;5428:6;5396:8;:39::i;:::-;-1:-1:-1;5451:4:0;5266:196;;;;;:::o;33391:210::-;13356:6;;-1:-1:-1;;;;;13356:6:0;386:10;13356:22;13348:67;;;;-1:-1:-1;;;13348:67:0;;;;;;;:::i;:::-;;;;;;;;;33506:9:::1;33501:94;33525:5;:12;33521:1;:16;33501:94;;;33579:6;33556:10;:20;33567:5;33573:1;33567:8;;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;;;;;-1:-1:-1;;;;;33556:20:0::1;::::0;;;::::1;::::0;;;;;;-1:-1:-1;33556:20:0;:29;;-1:-1:-1;;33556:29:0::1;::::0;::::1;;::::0;;;::::1;::::0;;33539:3;::::1;::::0;::::1;:::i;:::-;;;;33501:94;;;;33391:210:::0;;:::o;25243:263::-;13356:6;;-1:-1:-1;;;;;13356:6:0;386:10;13356:22;13348:67;;;;-1:-1:-1;;;13348:67:0;;;;;;;:::i;:::-;25376:4:::1;25368;25346:13;4667:12:::0;;;4581:105;25346:13:::1;:18;::::0;25362:2:::1;25346:18;:::i;:::-;25345:27;;;;:::i;:::-;25344:36;;;;:::i;:::-;25334:6;:46;;25315:135;;;::::0;-1:-1:-1;;;25315:135:0;;7947:2:1;25315:135:0::1;::::0;::::1;7929:21:1::0;7986:2;7966:18;;;7959:30;8025:34;8005:18;;;7998:62;-1:-1:-1;;;8076:18:1;;;8069:45;8131:19;;25315:135:0::1;7745:411:1::0;25315:135:0::1;25482:17;:6:::0;25492::::1;25482:17;:::i;:::-;25459:20;:40:::0;-1:-1:-1;25243:263:0:o;5469:498::-;5602:4;5617:36;5627:6;5635:9;5646:6;5617:9;:36::i;:::-;-1:-1:-1;;;;;5691:19:0;;5664:24;5691:19;;;:11;:19;;;;;;;;386:10;5691:33;;;;;;;;5752:26;;;;5733:108;;;;-1:-1:-1;;;5733:108:0;;8363:2:1;5733:108:0;;;8345:21:1;8402:2;8382:18;;;8375:30;8441:34;8421:18;;;8414:62;-1:-1:-1;;;8492:18:1;;;8485:38;8540:19;;5733:108:0;8161:404:1;5733:108:0;5872:57;5881:6;386:10;5922:6;5903:16;:25;5872:8;:57::i;:::-;-1:-1:-1;5956:4:0;;5469:498;-1:-1:-1;;;;5469:498:0:o;5974:274::-;386:10;6083:4;6165:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;6165:34:0;;;;;;;;;;6083:4;;6102:119;;6146:7;;6165:47;;6202:10;;6165:47;:::i;:::-;6102:8;:119::i;32534:149::-;13356:6;;-1:-1:-1;;;;;13356:6:0;386:10;13356:22;13348:67;;;;-1:-1:-1;;;13348:67:0;;;;;;;:::i;:::-;32628:4:::1;32584:23;4831:18:::0;;;;;;;;;;;32643:33:::1;4831:18:::0;32643:16:::1;:33::i;:::-;32575:108;32534:149::o:0;13775:143::-;13356:6;;-1:-1:-1;;;;;13356:6:0;386:10;13356:22;13348:67;;;;-1:-1:-1;;;13348:67:0;;;;;;;:::i;:::-;13864:6:::1;::::0;13843:40:::1;::::0;13880:1:::1;::::0;-1:-1:-1;;;;;13864:6:0::1;::::0;13843:40:::1;::::0;13880:1;;13843:40:::1;13892:6;:19:::0;;-1:-1:-1;;;;;;13892:19:0::1;::::0;;13775:143::o;26362:226::-;13356:6;;-1:-1:-1;;;;;13356:6:0;386:10;13356:22;13348:67;;;;-1:-1:-1;;;13348:67:0;;;;;;;:::i;:::-;26439:15:::1;:34:::0;;;26482:12:::1;:30:::0;;;26529:13:::1;::::0;26546:2:::1;-1:-1:-1::0;26529:19:0::1;26521:60;;;::::0;-1:-1:-1;;;26521:60:0;;8905:2:1;26521:60:0::1;::::0;::::1;8887:21:1::0;8944:2;8924:18;;;8917:30;8983;8963:18;;;8956:58;9031:18;;26521:60:0::1;8703:352:1::0;32735:116:0;13356:6;;32787:4;;-1:-1:-1;;;;;13356:6:0;386:10;13356:22;13348:67;;;;-1:-1:-1;;;13348:67:0;;;;;;;:::i;:::-;-1:-1:-1;32802:14:0::1;:22:::0;;-1:-1:-1;;32802:22:0::1;::::0;;:14:::1;32735:116:::0;:::o;25764:159::-;13356:6;;-1:-1:-1;;;;;13356:6:0;386:10;13356:22;13348:67;;;;-1:-1:-1;;;13348:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;25870:39:0;;;::::1;;::::0;;;:31:::1;:39;::::0;;;;:46;;-1:-1:-1;;25870:46:0::1;::::0;::::1;;::::0;;;::::1;::::0;;25764:159::o;33608:206::-;13356:6;;-1:-1:-1;;;;;13356:6:0;386:10;13356:22;13348:67;;;;-1:-1:-1;;;13348:67:0;;;;;;;:::i;:::-;33683:77:::1;::::0;33665:12:::1;::::0;33691:10:::1;::::0;33726:21:::1;::::0;33665:12;33683:77;33665:12;33683:77;33726:21;33691:10;33683:77:::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33664:96;;;33777:7;33769:38;;;::::0;-1:-1:-1;;;33769:38:0;;9472:2:1;33769:38:0::1;::::0;::::1;9454:21:1::0;9511:2;9491:18;;;9484:30;-1:-1:-1;;;9530:18:1;;;9523:48;9588:18;;33769:38:0::1;9270:342:1::0;25026:210:0;13356:6;;-1:-1:-1;;;;;13356:6:0;386:10;13356:22;13348:67;;;;-1:-1:-1;;;13348:67:0;;;;;;;:::i;:::-;25088:13:::1;::::0;::::1;;25087:14;25079:52;;;::::0;-1:-1:-1;;;25079:52:0;;9819:2:1;25079:52:0::1;::::0;::::1;9801:21:1::0;9858:2;9838:18;;;9831:30;9897:27;9877:18;;;9870:55;9942:18;;25079:52:0::1;9617:349:1::0;25079:52:0::1;25140:13;:20:::0;;-1:-1:-1;;25169:18:0;;;;;25217:12:::1;25196:18;:33:::0;25026:210::o;26019:97::-;13356:6;;-1:-1:-1;;;;;13356:6:0;386:10;13356:22;13348:67;;;;-1:-1:-1;;;13348:67:0;;;;;;;:::i;:::-;26088:11:::1;:21:::0;;;::::1;;::::0;::::1;-1:-1:-1::0;;26088:21:0;;::::1;::::0;;;::::1;::::0;;26019:97::o;4376:101::-;4432:13;4463:7;4456:14;;;;;:::i;27105:296::-;13356:6;;-1:-1:-1;;;;;13356:6:0;386:10;13356:22;13348:67;;;;-1:-1:-1;;;13348:67:0;;;;;;;:::i;:::-;27241:13:::1;-1:-1:-1::0;;;;;27233:21:0::1;:4;-1:-1:-1::0;;;;;27233:21:0::1;::::0;27214:128:::1;;;::::0;-1:-1:-1;;;27214:128:0;;10173:2:1;27214:128:0::1;::::0;::::1;10155:21:1::0;10212:2;10192:18;;;10185:30;10251:34;10231:18;;;10224:62;10322:34;10302:18;;;10295:62;-1:-1:-1;;;10373:19:1;;;10366:32;10415:19;;27214:128:0::1;9971:469:1::0;27214:128:0::1;27353:41;27382:4;27388:5;27353:28;:41::i;:::-;27105:296:::0;;:::o;6255:453::-;386:10;6369:4;6415:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;6415:34:0;;;;;;;;;;6477:35;;;;6458:114;;;;-1:-1:-1;;;6458:114:0;;10647:2:1;6458:114:0;;;10629:21:1;10686:2;10666:18;;;10659:30;10725:34;10705:18;;;10698:62;-1:-1:-1;;;10776:18:1;;;10769:35;10821:19;;6458:114:0;10445:401:1;6458:114:0;6603:67;386:10;6626:7;6654:15;6635:16;:34;6603:8;:67::i;:::-;-1:-1:-1;6697:4:0;;6255:453;-1:-1:-1;;;6255:453:0:o;4863:202::-;4977:4;4996:42;386:10;5020:9;5031:6;4996:9;:42::i;26595:179::-;13356:6;;-1:-1:-1;;;;;13356:6:0;386:10;13356:22;13348:67;;;;-1:-1:-1;;;13348:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;26678:28:0;::::1;;::::0;;;:19:::1;:28;::::0;;;;;;;;:39;;-1:-1:-1;;26678:39:0::1;::::0;::::1;;::::0;;::::1;::::0;;;26733:34;;1559:41:1;;;26733:34:0::1;::::0;1532:18:1;26733:34:0::1;;;;;;;26595:179:::0;;:::o;25513:244::-;13356:6;;-1:-1:-1;;;;;13356:6:0;386:10;13356:22;13348:67;;;;-1:-1:-1;;;13348:67:0;;;;;;;:::i;:::-;25649:4:::1;25641;25619:13;4667:12:::0;;;4581:105;25619:13:::1;:18;::::0;25635:2:::1;25619:18;:::i;:::-;25618:27;;;;:::i;:::-;25617:36;;;;:::i;:::-;25607:6;:46;;25588:124;;;::::0;-1:-1:-1;;;25588:124:0;;11053:2:1;25588:124:0::1;::::0;::::1;11035:21:1::0;11092:2;11072:18;;;11065:30;11131:34;11111:18;;;11104:62;-1:-1:-1;;;11182:18:1;;;11175:34;11226:19;;25588:124:0::1;10851:400:1::0;25588:124:0::1;25733:17;:6:::0;25743::::1;25733:17;:::i;:::-;25721:9;:29:::0;-1:-1:-1;25513:244:0:o;26781:317::-;13356:6;;-1:-1:-1;;;;;13356:6:0;386:10;13356:22;13348:67;;;;-1:-1:-1;;;13348:67:0;;;;;;;:::i;:::-;26919:9:::1;26914:111;26934:19:::0;;::::1;26914:111;;;27007:8;26972:19;:32;26992:8;;27001:1;26992:11;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;26972:32:0::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;26972:32:0;:43;;-1:-1:-1;;26972:43:0::1;::::0;::::1;;::::0;;;::::1;::::0;;26955:3;::::1;::::0;::::1;:::i;:::-;;;;26914:111;;;;27040:51;27072:8;;27082;27040:51;;;;;;;;:::i;:::-;;;;;;;;26781:317:::0;;;:::o;26123:232::-;13356:6;;-1:-1:-1;;;;;13356:6:0;386:10;13356:22;13348:67;;;;-1:-1:-1;;;13348:67:0;;;;;;;:::i;:::-;26202:16:::1;:36:::0;;;26247:13:::1;:32:::0;;;26313:2:::1;26296:19:::0;::::1;;26288:60;;;::::0;-1:-1:-1;;;26288:60:0;;8905:2:1;26288:60:0::1;::::0;::::1;8887:21:1::0;8944:2;8924:18;;;8917:30;8983;8963:18;;;8956:58;9031:18;;26288:60:0::1;8703:352:1::0;14068:266:0;13356:6;;-1:-1:-1;;;;;13356:6:0;386:10;13356:22;13348:67;;;;-1:-1:-1;;;13348:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;14166:22:0;::::1;14147:102;;;::::0;-1:-1:-1;;;14147:102:0;;12257:2:1;14147:102:0::1;::::0;::::1;12239:21:1::0;12296:2;12276:18;;;12269:30;12335:34;12315:18;;;12308:62;-1:-1:-1;;;12386:18:1;;;12379:36;12432:19;;14147:102:0::1;12055:402:1::0;14147:102:0::1;14284:6;::::0;14263:38:::1;::::0;-1:-1:-1;;;;;14263:38:0;;::::1;::::0;14284:6:::1;::::0;14263:38:::1;::::0;14284:6:::1;::::0;14263:38:::1;14310:6;:17:::0;;-1:-1:-1;;;;;;14310:17:0::1;-1:-1:-1::0;;;;;14310:17:0;;;::::1;::::0;;;::::1;::::0;;14068:266::o;7643:364::-;-1:-1:-1;;;;;7770:19:0;;7762:68;;;;-1:-1:-1;;;7762:68:0;;12664:2:1;7762:68:0;;;12646:21:1;12703:2;12683:18;;;12676:30;12742:34;12722:18;;;12715:62;-1:-1:-1;;;12793:18:1;;;12786:34;12837:19;;7762:68:0;12462:400:1;7762:68:0;-1:-1:-1;;;;;7847:21:0;;7839:68;;;;-1:-1:-1;;;7839:68:0;;13069:2:1;7839:68:0;;;13051:21:1;13108:2;13088:18;;;13081:30;13147:34;13127:18;;;13120:62;-1:-1:-1;;;13198:18:1;;;13191:32;13240:19;;7839:68:0;12867:398:1;7839:68:0;-1:-1:-1;;;;;7918:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;7968:32;;1757:25:1;;;7968:32:0;;1730:18:1;7968:32:0;;;;;;;7643:364;;;:::o;27728:3722::-;-1:-1:-1;;;;;27851:18:0;;27843:68;;;;-1:-1:-1;;;27843:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;27928:16:0;;27920:64;;;;-1:-1:-1;;;27920:64:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;28013:14:0;;;;;;:10;:14;;;;;;;;28012:15;:36;;;;-1:-1:-1;;;;;;28032:16:0;;;;;;:10;:16;;;;;;;;28031:17;28012:36;27993:127;;;;-1:-1:-1;;;27993:127:0;;14282:2:1;27993:127:0;;;14264:21:1;14321:2;14301:18;;;14294:30;14360:34;14340:18;;;14333:62;-1:-1:-1;;;14411:18:1;;;14404:47;14468:19;;27993:127:0;14080:413:1;27993:127:0;28135:6;28145:1;28135:11;28131:85;;28160:28;28176:4;28182:2;28186:1;28160:15;:28::i;28131:85::-;28231:13;;;;28226:171;;-1:-1:-1;;;;;28280:25:0;;;;;;:19;:25;;;;;;;;;:52;;-1:-1:-1;;;;;;28309:23:0;;;;;;:19;:23;;;;;;;;28280:52;28258:129;;;;-1:-1:-1;;;28258:129:0;;14700:2:1;28258:129:0;;;14682:21:1;14739:2;14719:18;;;14712:30;14778:28;14758:18;;;14751:56;14824:18;;28258:129:0;14498:350:1;28258:129:0;28411:14;;;;;;;28407:1517;;;13216:6;;-1:-1:-1;;;;;28457:15:0;;;13216:6;;28457:15;;;;:45;;-1:-1:-1;13216:6:0;;-1:-1:-1;;;;;28489:13:0;;;13216:6;;28489:13;;28457:45;:78;;;;-1:-1:-1;;;;;;28519:16:0;;;;28457:78;:116;;;;-1:-1:-1;;;;;;28552:21:0;;28566:6;28552:21;;28457:116;:142;;;;-1:-1:-1;28591:8:0;;-1:-1:-1;;;28591:8:0;;;;28590:9;28457:142;28439:1476;;;28632:13;;;;28627:197;;-1:-1:-1;;;;;28693:25:0;;;;;;:19;:25;;;;;;;;;:52;;-1:-1:-1;;;;;;28722:23:0;;;;;;:19;:23;;;;;;;;28693:52;28665:143;;;;-1:-1:-1;;;28665:143:0;;15055:2:1;28665:143:0;;;15037:21:1;15094:2;15074:18;;;15067:30;-1:-1:-1;;;15113:18:1;;;15106:52;15175:18;;28665:143:0;14853:346:1;28665:143:0;-1:-1:-1;;;;;28888:31:0;;;;;;:25;:31;;;;;;;;:87;;;;-1:-1:-1;;;;;;28940:35:0;;;;;;:31;:35;;;;;;;;28939:36;28888:87;28867:1036;;;29047:20;;:31;;29070:8;29047:31;:::i;:::-;29037:6;:41;;29009:163;;;;-1:-1:-1;;;29009:163:0;;15406:2:1;29009:163:0;;;15388:21:1;15445:2;15425:18;;;15418:30;15484:34;15464:18;;;15457:62;-1:-1:-1;;;15535:18:1;;;15528:51;15596:19;;29009:163:0;15204:417:1;29009:163:0;29244:9;;-1:-1:-1;;;;;4831:18:0;;4802:7;4831:18;;;;;;;;;;;29218:22;;:6;:22;:::i;:::-;:35;;29190:123;;;;-1:-1:-1;;;29190:123:0;;15828:2:1;29190:123:0;;;15810:21:1;15867:2;15847:18;;;15840:30;-1:-1:-1;;;15886:18:1;;;15879:49;15945:18;;29190:123:0;15626:343:1;29190:123:0;28867:1036;;;-1:-1:-1;;;;;29397:29:0;;;;;;:25;:29;;;;;;;;:87;;;;-1:-1:-1;;;;;;29447:37:0;;;;;;:31;:37;;;;;;;;29446:38;29397:87;29376:527;;;29556:20;;:31;;29579:8;29556:31;:::i;:::-;29546:6;:41;;29518:164;;;;-1:-1:-1;;;29518:164:0;;16176:2:1;29518:164:0;;;16158:21:1;16215:2;16195:18;;;16188:30;16254:34;16234:18;;;16227:62;-1:-1:-1;;;16305:18:1;;;16298:52;16367:19;;29518:164:0;15974:418:1;29376:527:0;-1:-1:-1;;;;;29709:35:0;;;;;;:31;:35;;;;;;;;29704:199;;29818:9;;-1:-1:-1;;;;;4831:18:0;;4802:7;4831:18;;;;;;;;;;;29792:22;;:6;:22;:::i;:::-;:35;;29764:123;;;;-1:-1:-1;;;29764:123:0;;15828:2:1;29764:123:0;;;15810:21:1;15867:2;15847:18;;;15840:30;-1:-1:-1;;;15886:18:1;;;15879:49;15945:18;;29764:123:0;15626:343:1;29764:123:0;29983:4;29934:28;4831:18;;;;;;;;;;;30037;;30013:42;;;;;;;30081:32;;-1:-1:-1;30102:11:0;;;;;;;30081:32;:55;;;;-1:-1:-1;30128:8:0;;-1:-1:-1;;;30128:8:0;;;;30127:9;30081:55;:101;;;;-1:-1:-1;;;;;;30151:31:0;;;;;;:25;:31;;;;;;;;30150:32;30081:101;:141;;;;-1:-1:-1;;;;;;30197:25:0;;;;;;:19;:25;;;;;;;;30196:26;30081:141;:179;;;;-1:-1:-1;;;;;;30237:23:0;;;;;;:19;:23;;;;;;;;30236:24;30081:179;30066:291;;;30282:8;:15;;-1:-1:-1;;;;30282:15:0;-1:-1:-1;;;30282:15:0;;;30309:10;:8;:10::i;:::-;30331:8;:16;;-1:-1:-1;;;;30331:16:0;;;30066:291;30383:8;;-1:-1:-1;;;;;30491:25:0;;30367:12;30491:25;;;:19;:25;;;;;;30383:8;-1:-1:-1;;;30383:8:0;;;;;30382:9;;30491:25;;:52;;-1:-1:-1;;;;;;30520:23:0;;;;;;:19;:23;;;;;;;;30491:52;30487:95;;;-1:-1:-1;30567:5:0;30487:95;30592:12;30674:7;30670:728;;;-1:-1:-1;;;;;30760:29:0;;;;;;:25;:29;;;;;;;;:50;;;;;30809:1;30793:13;;:17;30760:50;30756:508;;;30834:41;22432:4;30834:25;30845:13;;30834:6;:10;;:25;;;;:::i;:::-;:29;;:41::i;:::-;30827:48;;30907:4;30890:13;;:21;;;;;;;:::i;:::-;;;;-1:-1:-1;;30976:13:0;;30956:16;;30949:23;;:4;:23;:::i;:::-;30948:41;;;;:::i;:::-;30926:18;;:63;;;;;;;:::i;:::-;;;;-1:-1:-1;30756:508:0;;-1:-1:-1;30756:508:0;;-1:-1:-1;;;;;31044:31:0;;;;;;:25;:31;;;;;;;;31040:224;;;31099:40;22432:4;31099:24;31110:12;;31099:6;:10;;:24;;;;:::i;:40::-;31092:47;;31171:4;31154:13;;:21;;;;;;;:::i;:::-;;;;-1:-1:-1;;31239:12:0;;31220:15;;31213:22;;:4;:22;:::i;:::-;31212:39;;;;:::i;:::-;31190:18;;:61;;;;;;;:::i;:::-;;;;-1:-1:-1;;31040:224:0;31281:8;;31277:84;;31306:42;31322:4;31336;31343;31306:15;:42::i;:::-;31374:14;31384:4;31374:14;;:::i;:::-;;;30670:728;31410:33;31426:4;31432:2;31436:6;31410:15;:33::i;:::-;27834:3616;;;;27728:3722;;;:::o;31457:563::-;31605:16;;;31619:1;31605:16;;;;;;;;31581:21;;31605:16;;;;;;;;;;-1:-1:-1;31605:16:0;31581:40;;31648:4;31630;31635:1;31630:7;;;;;;;;:::i;:::-;;;;;;:23;-1:-1:-1;;;;;31630:23:0;;;-1:-1:-1;;;;;31630:23:0;;;;;31672:15;-1:-1:-1;;;;;31672:20:0;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;31662:4;31667:1;31662:7;;;;;;;;:::i;:::-;;;;;;:32;-1:-1:-1;;;;;31662:32:0;;;-1:-1:-1;;;;;31662:32:0;;;;;31705:62;31722:4;31737:15;31755:11;31705:8;:62::i;:::-;31804:209;;-1:-1:-1;;;31804:209:0;;-1:-1:-1;;;;;31804:15:0;:66;;;;:209;;31882:11;;31905:1;;31948:4;;31972;;31989:15;;31804:209;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31512:508;31457:563;:::o;27408:181::-;-1:-1:-1;;;;;27489:31:0;;;;;;:25;:31;;;;;;:39;;-1:-1:-1;;27489:39:0;;;;;;;;;;27542:40;;27489:39;;:31;27542:40;;;27408:181;;:::o;6715:616::-;-1:-1:-1;;;;;6846:20:0;;6838:70;;;;-1:-1:-1;;;6838:70:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;6925:23:0;;6917:71;;;;-1:-1:-1;;;6917:71:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;7023:17:0;;6999:21;7023:17;;;;;;;;;;;7068:23;;;;7049:103;;;;-1:-1:-1;;;7049:103:0;;17970:2:1;7049:103:0;;;17952:21:1;18009:2;17989:18;;;17982:30;18048:34;18028:18;;;18021:62;-1:-1:-1;;;18099:18:1;;;18092:36;18145:19;;7049:103:0;17768:402:1;7049:103:0;-1:-1:-1;;;;;7183:17:0;;;:9;:17;;;;;;;;;;;7203:22;;;7183:42;;7243:20;;;;;;;;:30;;7219:6;;7183:9;7243:30;;7219:6;;7243:30;:::i;:::-;;;;;;;;7306:9;-1:-1:-1;;;;;7289:35:0;7298:6;-1:-1:-1;;;;;7289:35:0;;7317:6;7289:35;;;;1757:25:1;;1745:2;1730:18;;1611:177;7289:35:0;;;;;;;;6829:502;6715:616;;;:::o;32858:526::-;32939:4;32895:23;4831:18;;;;;;;;;;;32982;;4831;;33036:20;;;:46;;-1:-1:-1;33060:22:0;;33036:46;33032:80;;;33096:7;;;32858:526::o;33032:80::-;33151:15;33175:36;33151:15;33175:16;:36::i;:::-;33244:15;;33236:82;;-1:-1:-1;;;;;33244:15:0;;;;33284:21;;33236:82;;;;33284:21;33244:15;33236:82;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;33350:1:0;33329:18;:22;;;33360:13;:17;-1:-1:-1;;;;;32858:526:0:o;9583:457::-;9641:7;9884:1;9889;9884:6;9880:42;;-1:-1:-1;9911:1:0;9904:8;;9880:42;9932:9;9944:5;9948:1;9944;:5;:::i;:::-;9932:17;-1:-1:-1;9975:1:0;9966:5;9970:1;9932:17;9966:5;:::i;:::-;:10;9958:56;;;;-1:-1:-1;;;9958:56:0;;18377:2:1;9958:56:0;;;18359:21:1;18416:2;18396:18;;;18389:30;18455:34;18435:18;;;18428:62;-1:-1:-1;;;18506:18:1;;;18499:31;18547:19;;9958:56:0;18175:397:1;9958:56:0;10032:1;9583:457;-1:-1:-1;;;9583:457:0:o;10503:129::-;10561:7;10586:39;10590:1;10593;10586:39;;;;;;;;;;;;;;;;;11228:7;11261:12;11254:5;11246:28;;;;-1:-1:-1;;;11246:28:0;;;;;;;;:::i;:::-;-1:-1:-1;11283:9:0;11295:5;11299:1;11295;:5;:::i;:::-;11283:17;11115:300;-1:-1:-1;;;;;11115:300:0:o;222:597:1:-;334:4;363:2;392;381:9;374:21;424:6;418:13;467:6;462:2;451:9;447:18;440:34;492:1;502:140;516:6;513:1;510:13;502:140;;;611:14;;;607:23;;601:30;577:17;;;596:2;573:26;566:66;531:10;;502:140;;;660:6;657:1;654:13;651:91;;;730:1;725:2;716:6;705:9;701:22;697:31;690:42;651:91;-1:-1:-1;803:2:1;782:15;-1:-1:-1;;778:29:1;763:45;;;;810:2;759:54;;222:597;-1:-1:-1;;;222:597:1:o;824:131::-;-1:-1:-1;;;;;899:31:1;;889:42;;879:70;;945:1;942;935:12;960:134;1028:20;;1057:31;1028:20;1057:31;:::i;:::-;960:134;;;:::o;1099:315::-;1167:6;1175;1228:2;1216:9;1207:7;1203:23;1199:32;1196:52;;;1244:1;1241;1234:12;1196:52;1283:9;1270:23;1302:31;1327:5;1302:31;:::i;:::-;1352:5;1404:2;1389:18;;;;1376:32;;-1:-1:-1;;;1099:315:1:o;1793:247::-;1852:6;1905:2;1893:9;1884:7;1880:23;1876:32;1873:52;;;1921:1;1918;1911:12;1873:52;1960:9;1947:23;1979:31;2004:5;1979:31;:::i;2280:127::-;2341:10;2336:3;2332:20;2329:1;2322:31;2372:4;2369:1;2362:15;2396:4;2393:1;2386:15;2412:160;2477:20;;2533:13;;2526:21;2516:32;;2506:60;;2562:1;2559;2552:12;2577:1191;2667:6;2675;2728:2;2716:9;2707:7;2703:23;2699:32;2696:52;;;2744:1;2741;2734:12;2696:52;2784:9;2771:23;2813:18;2854:2;2846:6;2843:14;2840:34;;;2870:1;2867;2860:12;2840:34;2908:6;2897:9;2893:22;2883:32;;2953:7;2946:4;2942:2;2938:13;2934:27;2924:55;;2975:1;2972;2965:12;2924:55;3011:2;2998:16;3033:4;3056:2;3052;3049:10;3046:36;;;3062:18;;:::i;:::-;3108:2;3105:1;3101:10;3140:2;3134:9;3203:2;3199:7;3194:2;3190;3186:11;3182:25;3174:6;3170:38;3258:6;3246:10;3243:22;3238:2;3226:10;3223:18;3220:46;3217:72;;;3269:18;;:::i;:::-;3305:2;3298:22;3355:18;;;3389:15;;;;-1:-1:-1;3431:11:1;;;3427:20;;;3459:19;;;3456:39;;;3491:1;3488;3481:12;3456:39;3515:11;;;;3535:148;3551:6;3546:3;3543:15;3535:148;;;3617:23;3636:3;3617:23;:::i;:::-;3605:36;;3568:12;;;;3661;;;;3535:148;;;3702:6;-1:-1:-1;3727:35:1;;-1:-1:-1;3743:18:1;;;3727:35;:::i;:::-;3717:45;;;;;;2577:1191;;;;;:::o;3773:180::-;3832:6;3885:2;3873:9;3864:7;3860:23;3856:32;3853:52;;;3901:1;3898;3891:12;3853:52;-1:-1:-1;3924:23:1;;3773:180;-1:-1:-1;3773:180:1:o;3958:456::-;4035:6;4043;4051;4104:2;4092:9;4083:7;4079:23;4075:32;4072:52;;;4120:1;4117;4110:12;4072:52;4159:9;4146:23;4178:31;4203:5;4178:31;:::i;:::-;4228:5;-1:-1:-1;4285:2:1;4270:18;;4257:32;4298:33;4257:32;4298:33;:::i;:::-;3958:456;;4350:7;;-1:-1:-1;;;4404:2:1;4389:18;;;;4376:32;;3958:456::o;4608:315::-;4673:6;4681;4734:2;4722:9;4713:7;4709:23;4705:32;4702:52;;;4750:1;4747;4740:12;4702:52;4789:9;4776:23;4808:31;4833:5;4808:31;:::i;:::-;4858:5;-1:-1:-1;4882:35:1;4913:2;4898:18;;4882:35;:::i;:::-;4872:45;;4608:315;;;;;:::o;4928:180::-;4984:6;5037:2;5025:9;5016:7;5012:23;5008:32;5005:52;;;5053:1;5050;5043:12;5005:52;5076:26;5092:9;5076:26;:::i;5113:689::-;5205:6;5213;5221;5274:2;5262:9;5253:7;5249:23;5245:32;5242:52;;;5290:1;5287;5280:12;5242:52;5330:9;5317:23;5359:18;5400:2;5392:6;5389:14;5386:34;;;5416:1;5413;5406:12;5386:34;5454:6;5443:9;5439:22;5429:32;;5499:7;5492:4;5488:2;5484:13;5480:27;5470:55;;5521:1;5518;5511:12;5470:55;5561:2;5548:16;5587:2;5579:6;5576:14;5573:34;;;5603:1;5600;5593:12;5573:34;5658:7;5651:4;5641:6;5638:1;5634:14;5630:2;5626:23;5622:34;5619:47;5616:67;;;5679:1;5676;5669:12;5616:67;5710:4;5702:13;;;;-1:-1:-1;5734:6:1;-1:-1:-1;5759:37:1;;5775:20;;;-1:-1:-1;5759:37:1;:::i;:::-;5749:47;;5113:689;;;;;:::o;5807:388::-;5875:6;5883;5936:2;5924:9;5915:7;5911:23;5907:32;5904:52;;;5952:1;5949;5942:12;5904:52;5991:9;5978:23;6010:31;6035:5;6010:31;:::i;:::-;6060:5;-1:-1:-1;6117:2:1;6102:18;;6089:32;6130:33;6089:32;6130:33;:::i;:::-;6182:7;6172:17;;;5807:388;;;;;:::o;6200:380::-;6279:1;6275:12;;;;6322;;;6343:61;;6397:4;6389:6;6385:17;6375:27;;6343:61;6450:2;6442:6;6439:14;6419:18;6416:38;6413:161;;6496:10;6491:3;6487:20;6484:1;6477:31;6531:4;6528:1;6521:15;6559:4;6556:1;6549:15;6413:161;;6200:380;;;:::o;6585:356::-;6787:2;6769:21;;;6806:18;;;6799:30;6865:34;6860:2;6845:18;;6838:62;6932:2;6917:18;;6585:356::o;6946:127::-;7007:10;7002:3;6998:20;6995:1;6988:31;7038:4;7035:1;7028:15;7062:4;7059:1;7052:15;7078:127;7139:10;7134:3;7130:20;7127:1;7120:31;7170:4;7167:1;7160:15;7194:4;7191:1;7184:15;7210:135;7249:3;7270:17;;;7267:43;;7290:18;;:::i;:::-;-1:-1:-1;7337:1:1;7326:13;;7210:135::o;7350:168::-;7390:7;7456:1;7452;7448:6;7444:14;7441:1;7438:21;7433:1;7426:9;7419:17;7415:45;7412:71;;;7463:18;;:::i;:::-;-1:-1:-1;7503:9:1;;7350:168::o;7523:217::-;7563:1;7589;7579:132;;7633:10;7628:3;7624:20;7621:1;7614:31;7668:4;7665:1;7658:15;7696:4;7693:1;7686:15;7579:132;-1:-1:-1;7725:9:1;;7523:217::o;8570:128::-;8610:3;8641:1;8637:6;8634:1;8631:13;8628:39;;;8647:18;;:::i;:::-;-1:-1:-1;8683:9:1;;8570:128::o;11256:794::-;11478:2;11490:21;;;11463:18;;11546:22;;;11430:4;11625:6;11599:2;11584:18;;11430:4;11659:304;11673:6;11670:1;11667:13;11659:304;;;11748:6;11735:20;11768:31;11793:5;11768:31;:::i;:::-;-1:-1:-1;;;;;11824:31:1;11812:44;;11879:4;11938:15;;;;11903:12;;;;11852:1;11688:9;11659:304;;;11663:3;11980;11972:11;;;;12035:6;12028:14;12021:22;12014:4;12003:9;11999:20;11992:52;11256:794;;;;;;:::o;13270:401::-;13472:2;13454:21;;;13511:2;13491:18;;;13484:30;13550:34;13545:2;13530:18;;13523:62;-1:-1:-1;;;13616:2:1;13601:18;;13594:35;13661:3;13646:19;;13270:401::o;13676:399::-;13878:2;13860:21;;;13917:2;13897:18;;;13890:30;13956:34;13951:2;13936:18;;13929:62;-1:-1:-1;;;14022:2:1;14007:18;;14000:33;14065:3;14050:19;;13676:399::o;16397:125::-;16437:4;16465:1;16462;16459:8;16456:34;;;16470:18;;:::i;:::-;-1:-1:-1;16507:9:1;;16397:125::o;16527:251::-;16597:6;16650:2;16638:9;16629:7;16625:23;16621:32;16618:52;;;16666:1;16663;16656:12;16618:52;16698:9;16692:16;16717:31;16742:5;16717:31;:::i;16783:980::-;17045:4;17093:3;17082:9;17078:19;17124:6;17113:9;17106:25;17150:2;17188:6;17183:2;17172:9;17168:18;17161:34;17231:3;17226:2;17215:9;17211:18;17204:31;17255:6;17290;17284:13;17321:6;17313;17306:22;17359:3;17348:9;17344:19;17337:26;;17398:2;17390:6;17386:15;17372:29;;17419:1;17429:195;17443:6;17440:1;17437:13;17429:195;;;17508:13;;-1:-1:-1;;;;;17504:39:1;17492:52;;17599:15;;;;17564:12;;;;17540:1;17458:9;17429:195;;;-1:-1:-1;;;;;;;17680:32:1;;;;17675:2;17660:18;;17653:60;-1:-1:-1;;;17744:3:1;17729:19;17722:35;17641:3;16783:980;-1:-1:-1;;;16783:980:1:o

Swarm Source

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