ETH Price: $3,366.12 (+2.78%)
Gas: 5 Gwei

Token

EARNATOR (EARN)
 

Overview

Max Total Supply

10,000,000 EARN

Holders

122

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
0.607630463864734299 EARN

Value
$0.00
0x7b1aeb33ed403ca8fa252be2a78d22ea3aeb3a88
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:
EARNATOR_OFFICIAL

Compiler Version
v0.8.21+commit.d9974bed

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

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

// SPDX-License-Identifier: MIT

/**
 An easy-to-use App that lets you earn rewards.
 Telegram : https://t.me/earnator
 Website : https://www.earnator.xyz/
 Twitter : https://twitter.com/earnatorxyz
 X : https://twitter.com/earnatorxyz
 
*/
pragma solidity ^0.8.15;

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

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

abstract contract Ownable is Context {
    address private _owner;

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

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

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        _checkOwner();
        _;
    }

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

    /**
     * @dev Throws if the sender is not the owner.
     */
    function _checkOwner() internal view virtual {
        require(owner() == _msgSender(), "Ownable: caller is not the owner");
    }

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

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

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Internal function without access restriction.
     */
    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}
interface IERC20 {
    /**
     * @dev Emitted when `value` tokens are moved from one account (`from`) to
     * another (`to`).
     *
     * Note that `value` may be zero.
     */
    event Transfer(address indexed from, address indexed to, uint256 value);

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

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

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

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

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

interface IERC20Metadata is IERC20 {
    /**
     * @dev Returns the name of the token.
     */
    function name() external view returns (string memory);

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

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

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

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

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

    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 to, uint256 amount) public virtual override returns (bool) {
        address owner = _msgSender();
        _transfer(owner, to, 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) {
        address owner = _msgSender();
        _approve(owner, spender, amount);
        return true;
    }

    function transferFrom(address from, address to, uint256 amount) public virtual override returns (bool) {
        address spender = _msgSender();
        _spendAllowance(from, spender, amount);
        _transfer(from, to, amount);
        return true;
    }

    function increaseAllowance(address spender, uint256 addedValue) public virtual returns (bool) {
        address owner = _msgSender();
        _approve(owner, spender, allowance(owner, spender) + addedValue);
        return true;
    }

    function decreaseAllowance(address spender, uint256 subtractedValue) public virtual returns (bool) {
        address owner = _msgSender();
        uint256 currentAllowance = allowance(owner, spender);
        require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero");
        unchecked {
            _approve(owner, spender, currentAllowance - subtractedValue);
        }

        return true;
    }

    function _transfer(address from, address to, uint256 amount) internal virtual {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");

        _beforeTokenTransfer(from, to, amount);

        uint256 fromBalance = _balances[from];
        require(fromBalance >= amount, "ERC20: transfer amount exceeds balance");
        unchecked {
            _balances[from] = fromBalance - amount;
            // Overflow not possible: the sum of all balances is capped by totalSupply, and the sum is preserved by
            // decrementing then incrementing.
            _balances[to] += amount;
        }

        emit Transfer(from, to, amount);

        _afterTokenTransfer(from, to, amount);
    }

    function _mint(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: mint to the zero address");

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

        _totalSupply += amount;
        unchecked {
            // Overflow not possible: balance + amount is at most totalSupply + amount, which is checked above.
            _balances[account] += amount;
        }
        emit Transfer(address(0), account, amount);

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

    function _burn(address account, uint256 amount) internal virtual {
        require(account != address(0), "ERC20: burn from the zero address");

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

        uint256 accountBalance = _balances[account];
        require(accountBalance >= amount, "ERC20: burn amount exceeds balance");
        unchecked {
            _balances[account] = accountBalance - amount;
            // Overflow not possible: amount <= accountBalance <= totalSupply.
            _totalSupply -= amount;
        }

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

        _afterTokenTransfer(account, address(0), 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);
    }

    function _spendAllowance(address owner, address spender, uint256 amount) internal virtual {
        uint256 currentAllowance = allowance(owner, spender);
        if (currentAllowance != type(uint256).max) {
            require(currentAllowance >= amount, "ERC20: insufficient allowance");
            unchecked {
                _approve(owner, spender, currentAllowance - amount);
            }
        }
    }

    function _beforeTokenTransfer(address from, address to, uint256 amount) internal virtual {}

    function _afterTokenTransfer(address from, address to, uint256 amount) internal virtual {}
}

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

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 DividendPayingTokenInterface {
  /// @notice View the amount of dividend in wei that an address can withdraw.
  /// @param _owner The address of a token holder.
  /// @return The amount of dividend in wei that `_owner` can withdraw.
  function dividendOf(address _owner) external view returns(uint256);

  /// @notice Withdraws the ether distributed to the sender.
  /// @dev SHOULD transfer `dividendOf(msg.sender)` wei to `msg.sender`, and `dividendOf(msg.sender)` SHOULD be 0 after the transfer.
  ///  MUST emit a `DividendWithdrawn` event if the amount of ether transferred is greater than 0.
  function withdrawDividend() external;
  
  /// @notice View the amount of dividend in wei that an address can withdraw.
  /// @param _owner The address of a token holder.
  /// @return The amount of dividend in wei that `_owner` can withdraw.
  function withdrawableDividendOf(address _owner) external view returns(uint256);

  /// @notice View the amount of dividend in wei that an address has withdrawn.
  /// @param _owner The address of a token holder.
  /// @return The amount of dividend in wei that `_owner` has withdrawn.
  function withdrawnDividendOf(address _owner) external view returns(uint256);

  /// @notice View the amount of dividend in wei that an address has earned in total.
  /// @dev accumulativeDividendOf(_owner) = withdrawableDividendOf(_owner) + withdrawnDividendOf(_owner)
  /// @param _owner The address of a token holder.
  /// @return The amount of dividend in wei that `_owner` has earned in total.
  function accumulativeDividendOf(address _owner) external view returns(uint256);


  /// @dev This event MUST emit when ether is distributed to token holders.
  /// @param from The address which sends ether to this contract.
  /// @param weiAmount The amount of distributed ether in wei.
  event DividendsDistributed(
    address indexed from,
    uint256 weiAmount
  );

  /// @dev This event MUST emit when an address withdraws their dividend.
  /// @param to The address which withdraws ether from this contract.
  /// @param weiAmount The amount of withdrawn ether in wei.
  event DividendWithdrawn(
    address indexed to,
    uint256 weiAmount
  );
  
}

interface IPair {
    function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);
    function token0() external view returns (address);

}

interface IFactory{
        function createPair(address tokenA, address tokenB) external returns (address pair);
        function getPair(address tokenA, address tokenB) external view returns (address pair);
}

interface IUniswapRouter {
    function factory() external pure returns (address);
    function WETH() external pure returns (address);
    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);
    
    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
    
    function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);
    
    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline) external;
}

contract DividendPayingToken is ERC20, DividendPayingTokenInterface, Ownable {

  using SafeMath for uint256;
  using SafeMathUint for uint256;
  using SafeMathInt for int256;

  address public LP_Token;


  // With `magnitude`, we can properly distribute dividends even if the amount of received ether is small.
  // For more discussion about choosing the value of `magnitude`,
  //  see https://github.com/ethereum/EIPs/issues/1726#issuecomment-472352728
  uint256 constant internal magnitude = 2**128;

  uint256 internal magnifiedDividendPerShare;

  // About dividendCorrection:
  // If the token balance of a `_user` is never changed, the dividend of `_user` can be computed with:
  //   `dividendOf(_user) = dividendPerShare * balanceOf(_user)`.
  // When `balanceOf(_user)` is changed (via minting/burning/transferring tokens),
  //   `dividendOf(_user)` should not be changed,
  //   but the computed value of `dividendPerShare * balanceOf(_user)` is changed.
  // To keep the `dividendOf(_user)` unchanged, we add a correction term:
  //   `dividendOf(_user) = dividendPerShare * balanceOf(_user) + dividendCorrectionOf(_user)`,
  //   where `dividendCorrectionOf(_user)` is updated whenever `balanceOf(_user)` is changed:
  //   `dividendCorrectionOf(_user) = dividendPerShare * (old balanceOf(_user)) - (new balanceOf(_user))`.
  // So now `dividendOf(_user)` returns the same value before and after `balanceOf(_user)` is changed.
  mapping(address => int256) internal magnifiedDividendCorrections;
  mapping(address => uint256) internal withdrawnDividends;

  uint256 public totalDividendsDistributed;
  uint256 public totalDividendsWithdrawn;

  constructor(string memory _name, string memory _symbol) ERC20(_name, _symbol) {}

  function distributeLPDividends(uint256 amount) public onlyOwner{
    require(totalSupply() > 0);

    if (amount > 0) {
      magnifiedDividendPerShare = magnifiedDividendPerShare.add(
        (amount).mul(magnitude) / totalSupply()
      );
      emit DividendsDistributed(msg.sender, amount);

      totalDividendsDistributed = totalDividendsDistributed.add(amount);
    }
  }

  /// @notice Withdraws the ether distributed to the sender.
  /// @dev It emits a `DividendWithdrawn` event if the amount of withdrawn ether is greater than 0.
  function withdrawDividend() public virtual override {
    _withdrawDividendOfUser(payable(msg.sender));
  }

  /// @notice Withdraws the ether distributed to the sender.
  /// @dev It emits a `DividendWithdrawn` event if the amount of withdrawn ether is greater than 0.
 function _withdrawDividendOfUser(address payable user) internal returns (uint256) {
    uint256 _withdrawableDividend = withdrawableDividendOf(user);
    if (_withdrawableDividend > 0) {
      withdrawnDividends[user] = withdrawnDividends[user].add(_withdrawableDividend);
      totalDividendsWithdrawn += _withdrawableDividend;
      emit DividendWithdrawn(user, _withdrawableDividend);
      bool success = IERC20(LP_Token).transfer(user, _withdrawableDividend);

      if(!success) {
        withdrawnDividends[user] = withdrawnDividends[user].sub(_withdrawableDividend);
        totalDividendsWithdrawn -= _withdrawableDividend;
        return 0;
      }

      return _withdrawableDividend;
    }

    return 0;
  }


  /// @notice View the amount of dividend in wei that an address can withdraw.
  /// @param _owner The address of a token holder.
  /// @return The amount of dividend in wei that `_owner` can withdraw.
  function dividendOf(address _owner) public view override returns(uint256) {
    return withdrawableDividendOf(_owner);
  }

  /// @notice View the amount of dividend in wei that an address can withdraw.
  /// @param _owner The address of a token holder.
  /// @return The amount of dividend in wei that `_owner` can withdraw.
  function withdrawableDividendOf(address _owner) public view override returns(uint256) {
    return accumulativeDividendOf(_owner).sub(withdrawnDividends[_owner]);
  }

  /// @notice View the amount of dividend in wei that an address has withdrawn.
  /// @param _owner The address of a token holder.
  /// @return The amount of dividend in wei that `_owner` has withdrawn.
  function withdrawnDividendOf(address _owner) public view override returns(uint256) {
    return withdrawnDividends[_owner];
  }


  /// @notice View the amount of dividend in wei that an address has earned in total.
  /// @dev accumulativeDividendOf(_owner) = withdrawableDividendOf(_owner) + withdrawnDividendOf(_owner)
  /// = (magnifiedDividendPerShare * balanceOf(_owner) + magnifiedDividendCorrections[_owner]) / magnitude
  /// @param _owner The address of a token holder.
  /// @return The amount of dividend in wei that `_owner` has earned in total.
  function accumulativeDividendOf(address _owner) public view override returns(uint256) {
    return magnifiedDividendPerShare.mul(balanceOf(_owner)).toInt256Safe()
      .add(magnifiedDividendCorrections[_owner]).toUint256Safe() / magnitude;
  }

  /// @dev Internal function that transfer tokens from one address to another.
  /// Update magnifiedDividendCorrections to keep dividends unchanged.
  /// @param from The address to transfer from.
  /// @param to The address to transfer to.
  /// @param value The amount to be transferred.
  function _transfer(address from, address to, uint256 value) internal virtual override {
    require(false);

    int256 _magCorrection = magnifiedDividendPerShare.mul(value).toInt256Safe();
    magnifiedDividendCorrections[from] = magnifiedDividendCorrections[from].add(_magCorrection);
    magnifiedDividendCorrections[to] = magnifiedDividendCorrections[to].sub(_magCorrection);
  }

  /// @dev Internal function that mints tokens to an account.
  /// Update magnifiedDividendCorrections to keep dividends unchanged.
  /// @param account The account that will receive the created tokens.
  /// @param value The amount that will be created.
  function _mint(address account, uint256 value) internal override {
    super._mint(account, value);

    magnifiedDividendCorrections[account] = magnifiedDividendCorrections[account]
      .sub( (magnifiedDividendPerShare.mul(value)).toInt256Safe() );
  }

  /// @dev Internal function that burns an amount of the token of a given account.
  /// Update magnifiedDividendCorrections to keep dividends unchanged.
  /// @param account The account whose tokens will be burnt.
  /// @param value The amount that will be burnt.
  function _burn(address account, uint256 value) internal override {
    super._burn(account, value);

    magnifiedDividendCorrections[account] = magnifiedDividendCorrections[account]
      .add( (magnifiedDividendPerShare.mul(value)).toInt256Safe() );
  }

  function _setBalance(address account, uint256 newBalance) internal {
    uint256 currentBalance = balanceOf(account);

    if(newBalance > currentBalance) {
      uint256 mintAmount = newBalance.sub(currentBalance);
      _mint(account, mintAmount);
    } else if(newBalance < currentBalance) {
      uint256 burnAmount = currentBalance.sub(newBalance);
      _burn(account, burnAmount);
    }
  }
}

contract EARNATOR_OFFICIAL is ERC20, Ownable {
    IUniswapRouter public router;
    address public pair;

    bool private swapping;
    bool public swapEnabled = true;
    bool public claimEnabled;
    bool public tradingEnabled;

    EarnatorDividendTracker public dividendTracker;

    address public devWallet;

    uint256 public swapTokensAtAmount;
    uint256 public maxBuyAmount;
    uint256 public maxSellAmount;
    uint256 public maxWallet;

    struct Taxes {
        uint256 liquidity;
        uint256 dev;
    }

    Taxes public buyTaxes = Taxes(2, 2);
    Taxes public sellTaxes = Taxes(2, 2);

    uint256 public totalBuyTax = 4;
    uint256 public totalSellTax = 4;

    mapping(address => bool) public _isBot;

    mapping(address => bool) private _isExcludedFromFees;
    mapping(address => bool) public automatedMarketMakerPairs;
    mapping(address => bool) private _isExcludedFromMaxWallet;

    ///////////////
    //   Events  //
    ///////////////

    event ExcludeFromFees(address indexed account, bool isExcluded);
    event ExcludeMultipleAccountsFromFees(address[] accounts, bool isExcluded);
    event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value);
    event GasForProcessingUpdated(
        uint256 indexed newValue,
        uint256 indexed oldValue
    );
    event SendDividends(uint256 tokensSwapped, uint256 amount);
    event ProcessedDividendTracker(
        uint256 iterations,
        uint256 claims,
        uint256 lastProcessedIndex,
        bool indexed automatic,
        uint256 gas,
        address indexed processor
    );

    constructor(address _developerwallet) ERC20("EARNATOR", "EARN") {
        dividendTracker = new EarnatorDividendTracker();
        setDevWallet(_developerwallet);

        IUniswapRouter _router = IUniswapRouter(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
        address _pair = IFactory(_router.factory()).createPair(
            address(this),
            _router.WETH()
        );

        router = _router;
        pair = _pair;
        setSwapTokensAtAmount(30000); //
        updateMaxWalletAmount(100000);
        setMaxBuyAndSell(100000, 100000);
        

        _setAutomatedMarketMakerPair(_pair, true);

        dividendTracker.updateLP_Token(pair);

        dividendTracker.excludeFromDividends(address(dividendTracker), true);
        dividendTracker.excludeFromDividends(address(this), true);
        dividendTracker.excludeFromDividends(owner(), true);
        dividendTracker.excludeFromDividends(address(0xdead), true);
        dividendTracker.excludeFromDividends(address(_router), true);

        excludeFromMaxWallet(address(_pair), true);
        excludeFromMaxWallet(address(this), true);
        excludeFromMaxWallet(address(_router), true);

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

        _mint(owner(), 10000000 * (10**18));
    }

    receive() external payable {}

    function updateDividendTracker(address newAddress) public onlyOwner {
        EarnatorDividendTracker newDividendTracker = EarnatorDividendTracker(
            payable(newAddress)
        );
        newDividendTracker.excludeFromDividends(
            address(newDividendTracker),
            true
        );
        newDividendTracker.excludeFromDividends(address(this), true);
        newDividendTracker.excludeFromDividends(owner(), true);
        newDividendTracker.excludeFromDividends(address(router), true);
        dividendTracker = newDividendTracker;
    }

    /// @notice Manual claim the dividends
    function claim() external {
        require(claimEnabled, "Claim not enabled");
        dividendTracker.processAccount(payable(msg.sender));
    }

    function updateMaxWalletAmount(uint256 newNum) public onlyOwner {
        require(newNum >= 100_000, "Cannot set maxWallet lower than 1%");
        maxWallet = newNum * 10**18;
    }

    function setMaxBuyAndSell(uint256 maxBuy, uint256 maxSell)
        public
        onlyOwner
    {
        require(maxBuy >= 25_000, "Cannot set maxbuy lower than 0.25% ");
        require(maxSell >= 25_000, "Cannot set maxsell lower than 0.25% ");
        maxBuyAmount = maxBuy * 10**18;
        maxSellAmount = maxSell * 10**18;
    }

    function setSwapTokensAtAmount(uint256 amount) public onlyOwner {
        swapTokensAtAmount = amount * 10**18;
    }

    function excludeFromMaxWallet(address account, bool excluded)
        public
        onlyOwner
    {
        _isExcludedFromMaxWallet[account] = excluded;
    }

    /// @notice Withdraw tokens sent by mistake.
    /// @param tokenAddress The address of the token to withdraw
    function rescueETH20Tokens(address tokenAddress) external onlyOwner {
        IERC20(tokenAddress).transfer(
            owner(),
            IERC20(tokenAddress).balanceOf(address(this))
        );
    }

    /// @notice Send remaining ETH to dev
    /// @dev It will send all ETH to dev
    function forceSend() external onlyOwner {
        uint256 ETHbalance = address(this).balance;
        (bool success, ) = payable(devWallet).call{value: ETHbalance}("");
        require(success);
    }

    function trackerRescueETH20Tokens(address tokenAddress) external onlyOwner {
        dividendTracker.trackerRescueETH20Tokens(msg.sender, tokenAddress);
    }

    function updateRouter(address newRouter) external onlyOwner {
        router = IUniswapRouter(newRouter);
    }

    /////////////////////////////////
    // Exclude / Include functions //
    /////////////////////////////////

    function excludeFromFees(address account, bool excluded) public onlyOwner {
        require(
            _isExcludedFromFees[account] != excluded,
            "Account is already the value of 'excluded'"
        );
        _isExcludedFromFees[account] = excluded;

        emit ExcludeFromFees(account, excluded);
    }

    /// @dev "true" to exlcude, "false" to include
    function excludeFromDividends(address account, bool value)
        public
        onlyOwner
    {
        dividendTracker.excludeFromDividends(account, value);
    }

    function setDevWallet(address newWallet) public onlyOwner {
        devWallet = newWallet;
    }

    function setBuyTaxes(uint256 _liquidity, uint256 _dev) public onlyOwner {
        require(_liquidity + _dev <= 25, "Fee must be <= 25%");
        buyTaxes = Taxes(_liquidity, _dev);
        totalBuyTax = _liquidity + _dev;
    }

    function setSellTaxes(uint256 _liquidity, uint256 _dev) public  onlyOwner {
        require(_liquidity <= 25, "Fee must be <= 25%");
        sellTaxes = Taxes(_liquidity, _dev);
        totalSellTax = _liquidity + _dev;
    }

    /// @notice Enable or disable internal swaps
    /// @dev Set "true" to enable internal swaps for liquidity, treasury and dividends
    function setSwapEnabled(bool _enabled) external onlyOwner {
        swapEnabled = _enabled;
    }

    function activateTrading() external onlyOwner {
        require(!tradingEnabled, "Trading already enabled");
        tradingEnabled = true;
        setBuyTaxes(5,20);
        setSellTaxes(5,20);
        // transfer(address(this), 1000000);
    }

    function setClaimEnabled(bool state) external onlyOwner {
        claimEnabled = state;
    }

    /// @param bot The bot address
    /// @param value "true" to blacklist, "false" to unblacklist
    function setBot(address bot, bool value) external onlyOwner {
        require(_isBot[bot] != value);
        _isBot[bot] = value;
    }

    function setLP_Token(address _lpToken) external onlyOwner {
        dividendTracker.updateLP_Token(_lpToken);
    }

    /// @dev Set new pairs created due to listing in new DEX
    function setAutomatedMarketMakerPair(address newPair, bool value)
        external
        onlyOwner
    {
        _setAutomatedMarketMakerPair(newPair, value);
    }

    function _setAutomatedMarketMakerPair(address newPair, bool value) private {
        require(
            automatedMarketMakerPairs[newPair] != value,
            "Automated market maker pair is already set to that value"
        );
        automatedMarketMakerPairs[newPair] = value;

        if (value) {
            dividendTracker.excludeFromDividends(newPair, true);
        }

        emit SetAutomatedMarketMakerPair(newPair, value);
    }

    //////////////////////
    // Getter Functions //
    //////////////////////

    function getTotalDividendsDistributed() external view returns (uint256) {
        return dividendTracker.totalDividendsDistributed();
    }

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

    function withdrawableDividendOf(address account)
        public
        view
        returns (uint256)
    {
        return dividendTracker.withdrawableDividendOf(account);
    }

    function dividendTokenBalanceOf(address account)
        public
        view
        returns (uint256)
    {
        return dividendTracker.balanceOf(account);
    }

    function getAccountInfo(address account)
        external
        view
        returns (
            address,
            uint256,
            uint256,
            uint256,
            uint256
        )
    {
        return dividendTracker.getAccount(account);
    }

    ////////////////////////
    // Transfer Functions //
    ////////////////////////

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

        if (
            !_isExcludedFromFees[from] && !_isExcludedFromFees[to] && !swapping
        ) {
            require(tradingEnabled, "Trading not active");
            if (automatedMarketMakerPairs[to]) {
                require(
                    amount <= maxSellAmount,
                    "You are exceeding maxSellAmount"
                );
            } else if (automatedMarketMakerPairs[from])
                require(
                    amount <= maxBuyAmount,
                    "You are exceeding maxBuyAmount"
                );
            if (!_isExcludedFromMaxWallet[to]) {
                require(
                    amount + balanceOf(to) <= maxWallet,
                    "Unable to exceed Max Wallet"
                );
            }
        }

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

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

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

            if (totalSellTax > 0) {
                swapAndLiquify(swapTokensAtAmount);
            }

            swapping = false;
        }

        bool takeFee = !swapping;

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

        if (!automatedMarketMakerPairs[to] && !automatedMarketMakerPairs[from])
            takeFee = false;

        if (takeFee) {
            uint256 feeAmt;
            if (automatedMarketMakerPairs[to])
                feeAmt = (amount * totalSellTax) / 100;
            else if (automatedMarketMakerPairs[from])
                feeAmt = (amount * totalBuyTax) / 100;

            amount = amount - feeAmt;
            super._transfer(from, address(this), feeAmt);
        }
        super._transfer(from, to, amount);

        try dividendTracker.setBalance(from, balanceOf(from)) {} catch {}
        try dividendTracker.setBalance(to, balanceOf(to)) {} catch {}
    }

    function swapAndLiquify(uint256 tokens) private {
        uint256 toSwapForLiq = ((tokens * sellTaxes.liquidity) / totalSellTax) / 2;
        uint256 tokensToAddLiquidityWith = ((tokens * sellTaxes.liquidity) / totalSellTax) / 2;
        uint256 toSwapForDev = (tokens * sellTaxes.dev) / totalSellTax;

        swapTokensForETH(toSwapForLiq);

        uint256 currentbalance = address(this).balance;

        if (currentbalance > 0) {
            // Add liquidity to uni
            addLiquidity(tokensToAddLiquidityWith, currentbalance);
        }

        swapTokensForETH(toSwapForDev);

        uint256 EthTaxBalance = address(this).balance;

        // Send ETH to dev
        uint256 devAmt = EthTaxBalance;

        if (devAmt > 0) {
            (bool success, ) = payable(devWallet).call{value: devAmt}("");
            require(success, "Failed to send ETH to dev wallet");
        }

        uint256 lpBalance = IERC20(pair).balanceOf(address(this));

        //Send LP to dividends
        uint256 dividends = lpBalance;

        if (dividends > 0) {
            bool success = IERC20(pair).transfer(
                address(dividendTracker),
                dividends
            );
            if (success) {
                dividendTracker.distributeLPDividends(dividends);
                emit SendDividends(tokens, dividends);
            }
        }
    }

    // transfers LP from the owners wallet to holders // must approve this contract, on pair contract before calling
    function ManualLiquidityDistribution(uint256 amount) public onlyOwner {
        bool success = IERC20(pair).transferFrom(
            msg.sender,
            address(dividendTracker),
            amount
        );
        if (success) {
            dividendTracker.distributeLPDividends(amount);
        }
    }

    function swapTokensForETH(uint256 tokenAmount) private {
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = router.WETH();

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

        // make the swap
        router.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(router), tokenAmount);

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

contract EarnatorDividendTracker is Ownable, DividendPayingToken {
    struct AccountInfo {
        address account;
        uint256 withdrawableDividends;
        uint256 totalDividends;
        uint256 lastClaimTime;
    }

    mapping(address => bool) public excludedFromDividends;

    mapping(address => uint256) public lastClaimTimes;

    event ExcludeFromDividends(address indexed account, bool value);
    event Claim(address indexed account, uint256 amount);

    constructor()
        DividendPayingToken("Earnator_Dividend_Tracker", "Earnator_Dividend_Tracker")
    {}

    function trackerRescueETH20Tokens(address recipient, address tokenAddress)
        external
        onlyOwner
    {
        IERC20(tokenAddress).transfer(
            recipient,
            IERC20(tokenAddress).balanceOf(address(this))
        );
    }

    function updateLP_Token(address _lpToken) external onlyOwner {
        LP_Token = _lpToken;
    }

    function _transfer(
        address,
        address,
        uint256
    ) internal pure override {
        require(false, "Linq_Dividend_Tracker: No transfers allowed");
    }

    function excludeFromDividends(address account, bool value)
        external
        onlyOwner
    {
        require(excludedFromDividends[account] != value);
        excludedFromDividends[account] = value;
        if (value == true) {
            _setBalance(account, 0);
        } else {
            _setBalance(account, balanceOf(account));
        }
        emit ExcludeFromDividends(account, value);
    }

    function getAccount(address account)
        public
        view
        returns (
            address,
            uint256,
            uint256,
            uint256,
            uint256
        )
    {
        AccountInfo memory info;
        info.account = account;
        info.withdrawableDividends = withdrawableDividendOf(account);
        info.totalDividends = accumulativeDividendOf(account);
        info.lastClaimTime = lastClaimTimes[account];
        return (
            info.account,
            info.withdrawableDividends,
            info.totalDividends,
            info.lastClaimTime,
            totalDividendsWithdrawn
        );
    }

    function setBalance(address account, uint256 newBalance)
        external
        onlyOwner
    {
        if (excludedFromDividends[account]) {
            return;
        }
        _setBalance(account, newBalance);
    }

    function processAccount(address payable account)
        external
        onlyOwner
        returns (bool)
    {
        uint256 amount = _withdrawDividendOfUser(account);

        if (amount > 0) {
            lastClaimTimes[account] = block.timestamp;
            emit Claim(account, amount);
            return true;
        }
        return false;
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"_developerwallet","type":"address"}],"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":"uint256","name":"newValue","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"oldValue","type":"uint256"}],"name":"GasForProcessingUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"iterations","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"claims","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"lastProcessedIndex","type":"uint256"},{"indexed":true,"internalType":"bool","name":"automatic","type":"bool"},{"indexed":false,"internalType":"uint256","name":"gas","type":"uint256"},{"indexed":true,"internalType":"address","name":"processor","type":"address"}],"name":"ProcessedDividendTracker","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokensSwapped","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"SendDividends","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":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":"uint256","name":"amount","type":"uint256"}],"name":"ManualLiquidityDistribution","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isBot","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"activateTrading","outputs":[],"stateMutability":"nonpayable","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":"buyTaxes","outputs":[{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"dev","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"claim","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"claimEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"devWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"dividendTokenBalanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"dividendTracker","outputs":[{"internalType":"contract EarnatorDividendTracker","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"excludeFromDividends","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":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromMaxWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"forceSend","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"getAccountInfo","outputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTotalDividendsDistributed","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":"maxBuyAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSellAmount","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":"pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"tokenAddress","type":"address"}],"name":"rescueETH20Tokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"router","outputs":[{"internalType":"contract IUniswapRouter","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellTaxes","outputs":[{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"dev","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newPair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"bot","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setBot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_liquidity","type":"uint256"},{"internalType":"uint256","name":"_dev","type":"uint256"}],"name":"setBuyTaxes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"state","type":"bool"}],"name":"setClaimEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newWallet","type":"address"}],"name":"setDevWallet","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_lpToken","type":"address"}],"name":"setLP_Token","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxBuy","type":"uint256"},{"internalType":"uint256","name":"maxSell","type":"uint256"}],"name":"setMaxBuyAndSell","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_liquidity","type":"uint256"},{"internalType":"uint256","name":"_dev","type":"uint256"}],"name":"setSellTaxes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_enabled","type":"bool"}],"name":"setSwapEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setSwapTokensAtAmount","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":"totalBuyTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSellTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"tokenAddress","type":"address"}],"name":"trackerRescueETH20Tokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"tradingEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newAddress","type":"address"}],"name":"updateDividendTracker","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newRouter","type":"address"}],"name":"updateRouter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"withdrawableDividendOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040526001600760156101000a81548160ff0219169083151502179055506040518060400160405280600281526020016002815250600e5f820151815f0155602082015181600101555050604051806040016040528060028152602001600281525060105f820151815f0155602082015181600101555050600460125560046013553480156200008f575f80fd5b5060405162009d2538038062009d258339818101604052810190620000b5919062001122565b6040518060400160405280600881526020017f4541524e41544f520000000000000000000000000000000000000000000000008152506040518060400160405280600481526020017f4541524e000000000000000000000000000000000000000000000000000000008152508160039081620001329190620013b6565b508060049081620001449190620013b6565b505050620001676200015b6200086f60201b60201c565b6200087660201b60201c565b6040516200017590620010af565b604051809103905ff0801580156200018f573d5f803e3d5ffd5b5060085f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620001e0816200093960201b60201c565b5f737a250d5630b4cf539739df2c5dacb4c659f2488d90505f8173ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000243573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062000269919062001122565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308473ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa158015620002cf573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190620002f5919062001122565b6040518363ffffffff1660e01b815260040162000314929190620014ab565b6020604051808303815f875af115801562000331573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019062000357919062001122565b90508160065f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508060075f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550620003ec6175306200098c60201b60201c565b62000400620186a0620009bb60201b60201c565b62000415620186a08062000a3360201b60201c565b6200042881600162000b0f60201b60201c565b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166344b6bd9e60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518263ffffffff1660e01b8152600401620004a59190620014d6565b5f604051808303815f87803b158015620004bd575f80fd5b505af1158015620004d0573d5f803e3d5ffd5b5050505060085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630483f7a060085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016040518363ffffffff1660e01b8152600401620005549291906200150d565b5f604051808303815f87803b1580156200056c575f80fd5b505af11580156200057f573d5f803e3d5ffd5b5050505060085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630483f7a03060016040518363ffffffff1660e01b8152600401620005e29291906200150d565b5f604051808303815f87803b158015620005fa575f80fd5b505af11580156200060d573d5f803e3d5ffd5b5050505060085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630483f7a06200065e62000cd560201b60201c565b60016040518363ffffffff1660e01b81526004016200067f9291906200150d565b5f604051808303815f87803b15801562000697575f80fd5b505af1158015620006aa573d5f803e3d5ffd5b5050505060085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630483f7a061dead60016040518363ffffffff1660e01b81526004016200070f9291906200150d565b5f604051808303815f87803b15801562000727575f80fd5b505af11580156200073a573d5f803e3d5ffd5b5050505060085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630483f7a08360016040518363ffffffff1660e01b81526004016200079d9291906200150d565b5f604051808303815f87803b158015620007b5575f80fd5b505af1158015620007c8573d5f803e3d5ffd5b50505050620007df81600162000cfd60201b60201c565b620007f230600162000cfd60201b60201c565b6200080582600162000cfd60201b60201c565b620008276200081962000cd560201b60201c565b600162000d6560201b60201c565b6200083a30600162000d6560201b60201c565b620008666200084e62000cd560201b60201c565b6a084595161401484a00000062000eaf60201b60201c565b50505062001a00565b5f33905090565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b620009496200101460201b60201c565b8060095f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6200099c6200101460201b60201c565b670de0b6b3a764000081620009b2919062001565565b600a8190555050565b620009cb6200101460201b60201c565b620186a081101562000a14576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000a0b9062001633565b60405180910390fd5b670de0b6b3a76400008162000a2a919062001565565b600d8190555050565b62000a436200101460201b60201c565b6161a882101562000a8b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000a8290620016c7565b60405180910390fd5b6161a881101562000ad3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000aca906200175b565b60405180910390fd5b670de0b6b3a76400008262000ae9919062001565565b600b81905550670de0b6b3a76400008162000b05919062001565565b600c819055505050565b80151560165f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1615150362000ba1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000b9890620017ef565b60405180910390fd5b8060165f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550801562000c8b5760085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630483f7a08360016040518363ffffffff1660e01b815260040162000c5b9291906200150d565b5f604051808303815f87803b15801562000c73575f80fd5b505af115801562000c86573d5f803e3d5ffd5b505050505b8015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b62000d0d6200101460201b60201c565b8060175f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b62000d756200101460201b60201c565b80151560155f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1615150362000e07576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000dfe9062001883565b60405180910390fd5b8060155f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df78260405162000ea39190620018a3565b60405180910390a25050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160362000f20576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000f17906200190c565b60405180910390fd5b62000f335f8383620010a560201b60201c565b8060025f82825462000f4691906200192c565b92505081905550805f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055508173ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405162000ff5919062001977565b60405180910390a3620010105f8383620010aa60201b60201c565b5050565b620010246200086f60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff166200104a62000cd560201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1614620010a3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200109a90620019e0565b60405180910390fd5b565b505050565b505050565b6131c38062006b6283390190565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f620010ec82620010c1565b9050919050565b620010fe81620010e0565b811462001109575f80fd5b50565b5f815190506200111c81620010f3565b92915050565b5f602082840312156200113a5762001139620010bd565b5b5f62001149848285016200110c565b91505092915050565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680620011ce57607f821691505b602082108103620011e457620011e362001189565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f60088302620012487fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826200120b565b6200125486836200120b565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f6200129e6200129862001292846200126c565b62001275565b6200126c565b9050919050565b5f819050919050565b620012b9836200127e565b620012d1620012c882620012a5565b84845462001217565b825550505050565b5f90565b620012e7620012d9565b620012f4818484620012ae565b505050565b5b818110156200131b576200130f5f82620012dd565b600181019050620012fa565b5050565b601f8211156200136a576200133481620011ea565b6200133f84620011fc565b810160208510156200134f578190505b620013676200135e85620011fc565b830182620012f9565b50505b505050565b5f82821c905092915050565b5f6200138c5f19846008026200136f565b1980831691505092915050565b5f620013a683836200137b565b9150826002028217905092915050565b620013c18262001152565b67ffffffffffffffff811115620013dd57620013dc6200115c565b5b620013e98254620011b6565b620013f68282856200131f565b5f60209050601f8311600181146200142c575f841562001417578287015190505b62001423858262001399565b86555062001492565b601f1984166200143c86620011ea565b5f5b8281101562001465578489015182556001820191506020850194506020810190506200143e565b8683101562001485578489015162001481601f8916826200137b565b8355505b6001600288020188555050505b505050505050565b620014a581620010e0565b82525050565b5f604082019050620014c05f8301856200149a565b620014cf60208301846200149a565b9392505050565b5f602082019050620014eb5f8301846200149a565b92915050565b5f8115159050919050565b6200150781620014f1565b82525050565b5f604082019050620015225f8301856200149a565b620015316020830184620014fc565b9392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f62001571826200126c565b91506200157e836200126c565b92508282026200158e816200126c565b91508282048414831517620015a857620015a762001538565b5b5092915050565b5f82825260208201905092915050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e205f8201527f3125000000000000000000000000000000000000000000000000000000000000602082015250565b5f6200161b602283620015af565b91506200162882620015bf565b604082019050919050565b5f6020820190508181035f8301526200164c816200160d565b9050919050565b7f43616e6e6f7420736574206d6178627579206c6f776572207468616e20302e325f8201527f3525200000000000000000000000000000000000000000000000000000000000602082015250565b5f620016af602383620015af565b9150620016bc8262001653565b604082019050919050565b5f6020820190508181035f830152620016e081620016a1565b9050919050565b7f43616e6e6f7420736574206d617873656c6c206c6f776572207468616e20302e5f8201527f3235252000000000000000000000000000000000000000000000000000000000602082015250565b5f62001743602483620015af565b91506200175082620016e7565b604082019050919050565b5f6020820190508181035f830152620017748162001735565b9050919050565b7f4175746f6d61746564206d61726b6574206d616b6572207061697220697320615f8201527f6c72656164792073657420746f20746861742076616c75650000000000000000602082015250565b5f620017d7603883620015af565b9150620017e4826200177b565b604082019050919050565b5f6020820190508181035f8301526200180881620017c9565b9050919050565b7f4163636f756e7420697320616c7265616479207468652076616c7565206f66205f8201527f276578636c756465642700000000000000000000000000000000000000000000602082015250565b5f6200186b602a83620015af565b915062001878826200180f565b604082019050919050565b5f6020820190508181035f8301526200189c816200185d565b9050919050565b5f602082019050620018b85f830184620014fc565b92915050565b7f45524332303a206d696e7420746f20746865207a65726f2061646472657373005f82015250565b5f620018f4601f83620015af565b91506200190182620018be565b602082019050919050565b5f6020820190508181035f8301526200192581620018e6565b9050919050565b5f62001938826200126c565b915062001945836200126c565b925082820190508082111562001960576200195f62001538565b5b92915050565b62001971816200126c565b82525050565b5f6020820190506200198c5f83018462001966565b92915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f620019c8602083620015af565b9150620019d58262001992565b602082019050919050565b5f6020820190508181035f830152620019f981620019ba565b9050919050565b6151548062001a0e5f395ff3fe608060405260043610610384575f3560e01c806388bdd9be116101d0578063abb8105211610101578063d2fcc0011161009f578063f2fde38b1161006e578063f2fde38b14610ce4578063f66895a314610d0c578063f887ea4014610d37578063f8b45b0514610d615761038b565b8063d2fcc00114610c2e578063dd62ed3e14610c56578063e01af92c14610c92578063e2f4560514610cba5761038b565b8063bdf1436d116100db578063bdf1436d14610b8e578063c024666814610bb6578063c18bc19514610bde578063c851cc3214610c065761038b565b8063abb8105214610aee578063afa4f3b214610b2a578063b62496f514610b525761038b565b80639a7a23d61161016e578063a8aa1b3111610148578063a8aa1b3114610a24578063a8b9d24014610a4e578063a9059cbb14610a8a578063aa35822c14610ac65761038b565b80639a7a23d614610998578063a11a1682146109c0578063a457c2d7146109e85761038b565b80638da5cb5b116101aa5780638da5cb5b146108f25780638ea5220f1461091c57806392929a091461094657806395d89b411461096e5761038b565b806388bdd9be1461087857806388e765ff146108a05780638c9684f9146108ca5761038b565b8063313ce567116102b557806366d602ae11610253578063715018a611610222578063715018a6146107cf57806379b447bd146107e55780637b510fe81461080d578063864701a51461084d5761038b565b806366d602ae146107035780636843cd841461072d5780636ddd17131461076957806370a08231146107935761038b565b806346469afb1161028f57806346469afb1461065d5780634ada218b146106875780634e71d92d146106b15780634fbee193146106c75761038b565b8063313ce567146105cf578063342aa8b5146105f957806339509351146106215761038b565b80631bff7898116103225780632866ed21116102fc5780632866ed21146105295780632c1f5216146105535780632e1ab9041461057d57806330bb4cff146105a55761038b565b80631bff78981461049b5780631f53ac02146104c557806323b872dd146104ed5761038b565b80630a78097d1161035e5780630a78097d1461041d5780630bd05b691461044557806312b77e8a1461045b57806318160ddd146104715761038b565b80630483f7a01461038f57806306fdde03146103b7578063095ea7b3146103e15761038b565b3661038b57005b5f80fd5b34801561039a575f80fd5b506103b560048036038101906103b09190613bb8565b610d8b565b005b3480156103c2575f80fd5b506103cb610e20565b6040516103d89190613c80565b60405180910390f35b3480156103ec575f80fd5b5061040760048036038101906104029190613cd3565b610eb0565b6040516104149190613d20565b60405180910390f35b348015610428575f80fd5b50610443600480360381019061043e9190613d39565b610ed2565b005b348015610450575f80fd5b50610459610fd7565b005b348015610466575f80fd5b5061046f611064565b005b34801561047c575f80fd5b50610485611106565b6040516104929190613d73565b60405180910390f35b3480156104a6575f80fd5b506104af61110f565b6040516104bc9190613d73565b60405180910390f35b3480156104d0575f80fd5b506104eb60048036038101906104e69190613d39565b611115565b005b3480156104f8575f80fd5b50610513600480360381019061050e9190613d8c565b611160565b6040516105209190613d20565b60405180910390f35b348015610534575f80fd5b5061053d61118e565b60405161054a9190613d20565b60405180910390f35b34801561055e575f80fd5b506105676111a1565b6040516105749190613e37565b60405180910390f35b348015610588575f80fd5b506105a3600480360381019061059e9190613d39565b6111c6565b005b3480156105b0575f80fd5b506105b9611258565b6040516105c69190613d73565b60405180910390f35b3480156105da575f80fd5b506105e36112ec565b6040516105f09190613e6b565b60405180910390f35b348015610604575f80fd5b5061061f600480360381019061061a9190613bb8565b6112f4565b005b34801561062c575f80fd5b5061064760048036038101906106429190613cd3565b6113ac565b6040516106549190613d20565b60405180910390f35b348015610668575f80fd5b506106716113e2565b60405161067e9190613d73565b60405180910390f35b348015610692575f80fd5b5061069b6113e8565b6040516106a89190613d20565b60405180910390f35b3480156106bc575f80fd5b506106c56113fb565b005b3480156106d2575f80fd5b506106ed60048036038101906106e89190613d39565b6114e7565b6040516106fa9190613d20565b60405180910390f35b34801561070e575f80fd5b50610717611539565b6040516107249190613d73565b60405180910390f35b348015610738575f80fd5b50610753600480360381019061074e9190613d39565b61153f565b6040516107609190613d73565b60405180910390f35b348015610774575f80fd5b5061077d6115e0565b60405161078a9190613d20565b60405180910390f35b34801561079e575f80fd5b506107b960048036038101906107b49190613d39565b6115f3565b6040516107c69190613d73565b60405180910390f35b3480156107da575f80fd5b506107e3611638565b005b3480156107f0575f80fd5b5061080b60048036038101906108069190613e84565b61164b565b005b348015610818575f80fd5b50610833600480360381019061082e9190613d39565b611715565b604051610844959493929190613ed1565b60405180910390f35b348015610858575f80fd5b506108616117c6565b60405161086f929190613f22565b60405180910390f35b348015610883575f80fd5b5061089e60048036038101906108999190613d39565b6117d7565b005b3480156108ab575f80fd5b506108b46119f3565b6040516108c19190613d73565b60405180910390f35b3480156108d5575f80fd5b506108f060048036038101906108eb9190613d39565b6119f9565b005b3480156108fd575f80fd5b50610906611a8d565b6040516109139190613f49565b60405180910390f35b348015610927575f80fd5b50610930611ab5565b60405161093d9190613f49565b60405180910390f35b348015610951575f80fd5b5061096c60048036038101906109679190613f62565b611ada565b005b348015610979575f80fd5b50610982611aff565b60405161098f9190613c80565b60405180910390f35b3480156109a3575f80fd5b506109be60048036038101906109b99190613bb8565b611b8f565b005b3480156109cb575f80fd5b506109e660048036038101906109e19190613e84565b611ba5565b005b3480156109f3575f80fd5b50610a0e6004803603810190610a099190613cd3565b611c33565b604051610a1b9190613d20565b60405180910390f35b348015610a2f575f80fd5b50610a38611ca8565b604051610a459190613f49565b60405180910390f35b348015610a59575f80fd5b50610a746004803603810190610a6f9190613d39565b611ccd565b604051610a819190613d73565b60405180910390f35b348015610a95575f80fd5b50610ab06004803603810190610aab9190613cd3565b611d6e565b604051610abd9190613d20565b60405180910390f35b348015610ad1575f80fd5b50610aec6004803603810190610ae79190613e84565b611d90565b005b348015610af9575f80fd5b50610b146004803603810190610b0f9190613d39565b611e29565b604051610b219190613d20565b60405180910390f35b348015610b35575f80fd5b50610b506004803603810190610b4b9190613f8d565b611e46565b005b348015610b5d575f80fd5b50610b786004803603810190610b739190613d39565b611e6b565b604051610b859190613d20565b60405180910390f35b348015610b99575f80fd5b50610bb46004803603810190610baf9190613f8d565b611e88565b005b348015610bc1575f80fd5b50610bdc6004803603810190610bd79190613bb8565b611fe4565b005b348015610be9575f80fd5b50610c046004803603810190610bff9190613f8d565b612121565b005b348015610c11575f80fd5b50610c2c6004803603810190610c279190613d39565b61218c565b005b348015610c39575f80fd5b50610c546004803603810190610c4f9190613bb8565b6121d7565b005b348015610c61575f80fd5b50610c7c6004803603810190610c779190613fb8565b612237565b604051610c899190613d73565b60405180910390f35b348015610c9d575f80fd5b50610cb86004803603810190610cb39190613f62565b6122b9565b005b348015610cc5575f80fd5b50610cce6122de565b604051610cdb9190613d73565b60405180910390f35b348015610cef575f80fd5b50610d0a6004803603810190610d059190613d39565b6122e4565b005b348015610d17575f80fd5b50610d20612366565b604051610d2e929190613f22565b60405180910390f35b348015610d42575f80fd5b50610d4b612377565b604051610d589190614016565b60405180910390f35b348015610d6c575f80fd5b50610d7561239c565b604051610d829190613d73565b60405180910390f35b610d936123a2565b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630483f7a083836040518363ffffffff1660e01b8152600401610def92919061402f565b5f604051808303815f87803b158015610e06575f80fd5b505af1158015610e18573d5f803e3d5ffd5b505050505050565b606060038054610e2f90614083565b80601f0160208091040260200160405190810160405280929190818152602001828054610e5b90614083565b8015610ea65780601f10610e7d57610100808354040283529160200191610ea6565b820191905f5260205f20905b815481529060010190602001808311610e8957829003601f168201915b5050505050905090565b5f80610eba612420565b9050610ec7818585612427565b600191505092915050565b610eda6123a2565b8073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb610efe611a8d565b8373ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610f379190613f49565b602060405180830381865afa158015610f52573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f7691906140c7565b6040518363ffffffff1660e01b8152600401610f939291906140f2565b6020604051808303815f875af1158015610faf573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610fd3919061412d565b5050565b610fdf6123a2565b600760179054906101000a900460ff161561102f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611026906141a2565b60405180910390fd5b6001600760176101000a81548160ff02191690831515021790555061105660056014611d90565b61106260056014611ba5565b565b61106c6123a2565b5f4790505f60095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16826040516110b6906141ed565b5f6040518083038185875af1925050503d805f81146110f0576040519150601f19603f3d011682016040523d82523d5f602084013e6110f5565b606091505b5050905080611102575f80fd5b5050565b5f600254905090565b60135481565b61111d6123a2565b8060095f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b5f8061116a612420565b90506111778582856125ea565b611182858585612675565b60019150509392505050565b600760169054906101000a900460ff1681565b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6111ce6123a2565b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166344b6bd9e826040518263ffffffff1660e01b81526004016112289190613f49565b5f604051808303815f87803b15801561123f575f80fd5b505af1158015611251573d5f803e3d5ffd5b5050505050565b5f60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166385a6b3ae6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156112c3573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906112e791906140c7565b905090565b5f6012905090565b6112fc6123a2565b80151560145f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16151503611354575f80fd5b8060145f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b5f806113b6612420565b90506113d78185856113c88589612237565b6113d2919061422e565b612427565b600191505092915050565b60125481565b600760179054906101000a900460ff1681565b600760169054906101000a900460ff1661144a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611441906142ab565b60405180910390fd5b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663807ab4f7336040518263ffffffff1660e01b81526004016114a491906142e9565b6020604051808303815f875af11580156114c0573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906114e4919061412d565b50565b5f60155f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169050919050565b600c5481565b5f60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231836040518263ffffffff1660e01b815260040161159a9190613f49565b602060405180830381865afa1580156115b5573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906115d991906140c7565b9050919050565b600760159054906101000a900460ff1681565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b6116406123a2565b6116495f612f66565b565b6116536123a2565b6161a8821015611698576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161168f90614372565b60405180910390fd5b6161a88110156116dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116d490614400565b60405180910390fd5b670de0b6b3a7640000826116f1919061441e565b600b81905550670de0b6b3a76400008161170b919061441e565b600c819055505050565b5f805f805f60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663fbcbc0f1876040518263ffffffff1660e01b81526004016117749190613f49565b60a060405180830381865afa15801561178f573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906117b39190614473565b9450945094509450945091939590929450565b600e805f0154908060010154905082565b6117df6123a2565b5f8190508073ffffffffffffffffffffffffffffffffffffffff16630483f7a08260016040518363ffffffff1660e01b815260040161181f92919061402f565b5f604051808303815f87803b158015611836575f80fd5b505af1158015611848573d5f803e3d5ffd5b505050508073ffffffffffffffffffffffffffffffffffffffff16630483f7a03060016040518363ffffffff1660e01b815260040161188892919061402f565b5f604051808303815f87803b15801561189f575f80fd5b505af11580156118b1573d5f803e3d5ffd5b505050508073ffffffffffffffffffffffffffffffffffffffff16630483f7a06118d9611a8d565b60016040518363ffffffff1660e01b81526004016118f892919061402f565b5f604051808303815f87803b15801561190f575f80fd5b505af1158015611921573d5f803e3d5ffd5b505050508073ffffffffffffffffffffffffffffffffffffffff16630483f7a060065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016040518363ffffffff1660e01b815260040161198292919061402f565b5f604051808303815f87803b158015611999575f80fd5b505af11580156119ab573d5f803e3d5ffd5b505050508060085f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b600b5481565b611a016123a2565b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663497ec82333836040518363ffffffff1660e01b8152600401611a5d9291906144ea565b5f604051808303815f87803b158015611a74575f80fd5b505af1158015611a86573d5f803e3d5ffd5b5050505050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611ae26123a2565b80600760166101000a81548160ff02191690831515021790555050565b606060048054611b0e90614083565b80601f0160208091040260200160405190810160405280929190818152602001828054611b3a90614083565b8015611b855780601f10611b5c57610100808354040283529160200191611b85565b820191905f5260205f20905b815481529060010190602001808311611b6857829003601f168201915b5050505050905090565b611b976123a2565b611ba18282613029565b5050565b611bad6123a2565b6019821115611bf1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611be89061455b565b60405180910390fd5b60405180604001604052808381526020018281525060105f820151815f0155602082015181600101559050508082611c29919061422e565b6013819055505050565b5f80611c3d612420565b90505f611c4a8286612237565b905083811015611c8f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c86906145e9565b60405180910390fd5b611c9c8286868403612427565b60019250505092915050565b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a8b9d240836040518263ffffffff1660e01b8152600401611d289190613f49565b602060405180830381865afa158015611d43573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611d6791906140c7565b9050919050565b5f80611d78612420565b9050611d85818585612675565b600191505092915050565b611d986123a2565b60198183611da6919061422e565b1115611de7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dde9061455b565b60405180910390fd5b604051806040016040528083815260200182815250600e5f820151815f0155602082015181600101559050508082611e1f919061422e565b6012819055505050565b6014602052805f5260405f205f915054906101000a900460ff1681565b611e4e6123a2565b670de0b6b3a764000081611e62919061441e565b600a8190555050565b6016602052805f5260405f205f915054906101000a900460ff1681565b611e906123a2565b5f60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd3360085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16856040518463ffffffff1660e01b8152600401611f1093929190614607565b6020604051808303815f875af1158015611f2c573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611f50919061412d565b90508015611fe05760085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ede6ad9c836040518263ffffffff1660e01b8152600401611fb29190613d73565b5f604051808303815f87803b158015611fc9575f80fd5b505af1158015611fdb573d5f803e3d5ffd5b505050505b5050565b611fec6123a2565b80151560155f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1615150361207b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612072906146ac565b60405180910390fd5b8060155f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7826040516121159190613d20565b60405180910390a25050565b6121296123a2565b620186a081101561216f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121669061473a565b60405180910390fd5b670de0b6b3a764000081612183919061441e565b600d8190555050565b6121946123a2565b8060065f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6121df6123a2565b8060175f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b6122c16123a2565b80600760156101000a81548160ff02191690831515021790555050565b600a5481565b6122ec6123a2565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361235a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612351906147c8565b60405180910390fd5b61236381612f66565b50565b6010805f0154908060010154905082565b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600d5481565b6123aa612420565b73ffffffffffffffffffffffffffffffffffffffff166123c8611a8d565b73ffffffffffffffffffffffffffffffffffffffff161461241e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161241590614830565b60405180910390fd5b565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612495576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161248c906148be565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612503576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124fa9061494c565b60405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516125dd9190613d73565b60405180910390a3505050565b5f6125f58484612237565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811461266f5781811015612661576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612658906149b4565b60405180910390fd5b61266e8484848403612427565b5b50505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036126e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126da90614a42565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612751576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161274890614ad0565b60405180910390fd5b60155f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff161580156127ef575060155f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b80156128085750600760149054906101000a900460ff16155b15612a3357600760179054906101000a900460ff1661285c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161285390614b38565b60405180910390fd5b60165f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16156128f557600c548111156128f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128e790614ba0565b60405180910390fd5b61298b565b60165f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff161561298a57600b54811115612989576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161298090614c08565b60405180910390fd5b5b5b60175f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16612a3257600d546129e5836115f3565b826129f0919061422e565b1115612a31576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a2890614c70565b60405180910390fd5b5b5b5f8103612a4a57612a4583835f6131e7565b612f61565b5f612a54306115f3565b90505f600a548210159050808015612a795750600760149054906101000a900460ff16155b8015612a915750600760159054906101000a900460ff165b8015612ae3575060165f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b8015612b36575060155f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b8015612b89575060155f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15612bda576001600760146101000a81548160ff0219169083151502179055505f6013541115612bbf57612bbe600a54613453565b5b5f600760146101000a81548160ff0219169083151502179055505b5f600760149054906101000a900460ff1615905060155f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680612c89575060155f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b15612c92575f90505b60165f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16158015612d30575060165f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15612d39575f90505b8015612e38575f60165f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1615612db057606460135486612d9f919061441e565b612da99190614cbb565b9050612e1d565b60165f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1615612e1c57606460125486612e0f919061441e565b612e199190614cbb565b90505b5b8085612e299190614ceb565b9450612e368730836131e7565b505b612e438686866131e7565b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e30443bc87612e8a896115f3565b6040518363ffffffff1660e01b8152600401612ea79291906140f2565b5f604051808303815f87803b158015612ebe575f80fd5b505af1925050508015612ecf575060015b5060085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e30443bc86612f17886115f3565b6040518363ffffffff1660e01b8152600401612f349291906140f2565b5f604051808303815f87803b158015612f4b575f80fd5b505af1925050508015612f5c575060015b505050505b505050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b80151560165f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff161515036130b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130af90614d8e565b60405180910390fd5b8060165f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550801561319d5760085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630483f7a08360016040518363ffffffff1660e01b815260040161316f92919061402f565b5f604051808303815f87803b158015613186575f80fd5b505af1158015613198573d5f803e3d5ffd5b505050505b8015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603613255576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161324c90614a42565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036132c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132ba90614ad0565b60405180910390fd5b6132ce83838361380c565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905081811015613351576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161334890614e1c565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550815f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161343a9190613d73565b60405180910390a361344d848484613811565b50505050565b5f600260135460105f015484613469919061441e565b6134739190614cbb565b61347d9190614cbb565b90505f600260135460105f015485613495919061441e565b61349f9190614cbb565b6134a99190614cbb565b90505f601354601060010154856134c0919061441e565b6134ca9190614cbb565b90506134d583613816565b5f4790505f8111156134ec576134eb8382613a4c565b5b6134f582613816565b5f4790505f8190505f8111156135d0575f60095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168260405161354b906141ed565b5f6040518083038185875af1925050503d805f8114613585576040519150601f19603f3d011682016040523d82523d5f602084013e61358a565b606091505b50509050806135ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016135c590614e84565b60405180910390fd5b505b5f60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161362b9190613f49565b602060405180830381865afa158015613646573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061366a91906140c7565b90505f8190505f811115613801575f60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846040518363ffffffff1660e01b81526004016136f69291906140f2565b6020604051808303815f875af1158015613712573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613736919061412d565b905080156137ff5760085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ede6ad9c836040518263ffffffff1660e01b81526004016137989190613d73565b5f604051808303815f87803b1580156137af575f80fd5b505af11580156137c1573d5f803e3d5ffd5b505050507f80195cc573b02cc48460cbca6e6e4cc85ddb91959d946e1c3025ea3d87942dc38a836040516137f6929190613f22565b60405180910390a15b505b505050505050505050565b505050565b505050565b5f600267ffffffffffffffff81111561383257613831614ea2565b5b6040519080825280602002602001820160405280156138605781602001602082028036833780820191505090505b50905030815f8151811061387757613876614ecf565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561391b573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061393f9190614efc565b8160018151811061395357613952614ecf565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506139b93060065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684612427565b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac947835f8430426040518663ffffffff1660e01b8152600401613a1b959493929190615017565b5f604051808303815f87803b158015613a32575f80fd5b505af1158015613a44573d5f803e3d5ffd5b505050505050565b613a783060065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684612427565b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d7198230855f8030426040518863ffffffff1660e01b8152600401613add9695949392919061506f565b60606040518083038185885af1158015613af9573d5f803e3d5ffd5b50505050506040513d601f19601f82011682018060405250810190613b1e91906150ce565b5050505050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f613b5282613b29565b9050919050565b613b6281613b48565b8114613b6c575f80fd5b50565b5f81359050613b7d81613b59565b92915050565b5f8115159050919050565b613b9781613b83565b8114613ba1575f80fd5b50565b5f81359050613bb281613b8e565b92915050565b5f8060408385031215613bce57613bcd613b25565b5b5f613bdb85828601613b6f565b9250506020613bec85828601613ba4565b9150509250929050565b5f81519050919050565b5f82825260208201905092915050565b5f5b83811015613c2d578082015181840152602081019050613c12565b5f8484015250505050565b5f601f19601f8301169050919050565b5f613c5282613bf6565b613c5c8185613c00565b9350613c6c818560208601613c10565b613c7581613c38565b840191505092915050565b5f6020820190508181035f830152613c988184613c48565b905092915050565b5f819050919050565b613cb281613ca0565b8114613cbc575f80fd5b50565b5f81359050613ccd81613ca9565b92915050565b5f8060408385031215613ce957613ce8613b25565b5b5f613cf685828601613b6f565b9250506020613d0785828601613cbf565b9150509250929050565b613d1a81613b83565b82525050565b5f602082019050613d335f830184613d11565b92915050565b5f60208284031215613d4e57613d4d613b25565b5b5f613d5b84828501613b6f565b91505092915050565b613d6d81613ca0565b82525050565b5f602082019050613d865f830184613d64565b92915050565b5f805f60608486031215613da357613da2613b25565b5b5f613db086828701613b6f565b9350506020613dc186828701613b6f565b9250506040613dd286828701613cbf565b9150509250925092565b5f819050919050565b5f613dff613dfa613df584613b29565b613ddc565b613b29565b9050919050565b5f613e1082613de5565b9050919050565b5f613e2182613e06565b9050919050565b613e3181613e17565b82525050565b5f602082019050613e4a5f830184613e28565b92915050565b5f60ff82169050919050565b613e6581613e50565b82525050565b5f602082019050613e7e5f830184613e5c565b92915050565b5f8060408385031215613e9a57613e99613b25565b5b5f613ea785828601613cbf565b9250506020613eb885828601613cbf565b9150509250929050565b613ecb81613b48565b82525050565b5f60a082019050613ee45f830188613ec2565b613ef16020830187613d64565b613efe6040830186613d64565b613f0b6060830185613d64565b613f186080830184613d64565b9695505050505050565b5f604082019050613f355f830185613d64565b613f426020830184613d64565b9392505050565b5f602082019050613f5c5f830184613ec2565b92915050565b5f60208284031215613f7757613f76613b25565b5b5f613f8484828501613ba4565b91505092915050565b5f60208284031215613fa257613fa1613b25565b5b5f613faf84828501613cbf565b91505092915050565b5f8060408385031215613fce57613fcd613b25565b5b5f613fdb85828601613b6f565b9250506020613fec85828601613b6f565b9150509250929050565b5f61400082613e06565b9050919050565b61401081613ff6565b82525050565b5f6020820190506140295f830184614007565b92915050565b5f6040820190506140425f830185613ec2565b61404f6020830184613d11565b9392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061409a57607f821691505b6020821081036140ad576140ac614056565b5b50919050565b5f815190506140c181613ca9565b92915050565b5f602082840312156140dc576140db613b25565b5b5f6140e9848285016140b3565b91505092915050565b5f6040820190506141055f830185613ec2565b6141126020830184613d64565b9392505050565b5f8151905061412781613b8e565b92915050565b5f6020828403121561414257614141613b25565b5b5f61414f84828501614119565b91505092915050565b7f54726164696e6720616c726561647920656e61626c65640000000000000000005f82015250565b5f61418c601783613c00565b915061419782614158565b602082019050919050565b5f6020820190508181035f8301526141b981614180565b9050919050565b5f81905092915050565b50565b5f6141d85f836141c0565b91506141e3826141ca565b5f82019050919050565b5f6141f7826141cd565b9150819050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f61423882613ca0565b915061424383613ca0565b925082820190508082111561425b5761425a614201565b5b92915050565b7f436c61696d206e6f7420656e61626c65640000000000000000000000000000005f82015250565b5f614295601183613c00565b91506142a082614261565b602082019050919050565b5f6020820190508181035f8301526142c281614289565b9050919050565b5f6142d382613b29565b9050919050565b6142e3816142c9565b82525050565b5f6020820190506142fc5f8301846142da565b92915050565b7f43616e6e6f7420736574206d6178627579206c6f776572207468616e20302e325f8201527f3525200000000000000000000000000000000000000000000000000000000000602082015250565b5f61435c602383613c00565b915061436782614302565b604082019050919050565b5f6020820190508181035f83015261438981614350565b9050919050565b7f43616e6e6f7420736574206d617873656c6c206c6f776572207468616e20302e5f8201527f3235252000000000000000000000000000000000000000000000000000000000602082015250565b5f6143ea602483613c00565b91506143f582614390565b604082019050919050565b5f6020820190508181035f830152614417816143de565b9050919050565b5f61442882613ca0565b915061443383613ca0565b925082820261444181613ca0565b9150828204841483151761445857614457614201565b5b5092915050565b5f8151905061446d81613b59565b92915050565b5f805f805f60a0868803121561448c5761448b613b25565b5b5f6144998882890161445f565b95505060206144aa888289016140b3565b94505060406144bb888289016140b3565b93505060606144cc888289016140b3565b92505060806144dd888289016140b3565b9150509295509295909350565b5f6040820190506144fd5f830185613ec2565b61450a6020830184613ec2565b9392505050565b7f466565206d757374206265203c3d2032352500000000000000000000000000005f82015250565b5f614545601283613c00565b915061455082614511565b602082019050919050565b5f6020820190508181035f83015261457281614539565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f775f8201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b5f6145d3602583613c00565b91506145de82614579565b604082019050919050565b5f6020820190508181035f830152614600816145c7565b9050919050565b5f60608201905061461a5f830186613ec2565b6146276020830185613ec2565b6146346040830184613d64565b949350505050565b7f4163636f756e7420697320616c7265616479207468652076616c7565206f66205f8201527f276578636c756465642700000000000000000000000000000000000000000000602082015250565b5f614696602a83613c00565b91506146a18261463c565b604082019050919050565b5f6020820190508181035f8301526146c38161468a565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e205f8201527f3125000000000000000000000000000000000000000000000000000000000000602082015250565b5f614724602283613c00565b915061472f826146ca565b604082019050919050565b5f6020820190508181035f83015261475181614718565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f6147b2602683613c00565b91506147bd82614758565b604082019050919050565b5f6020820190508181035f8301526147df816147a6565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f61481a602083613c00565b9150614825826147e6565b602082019050919050565b5f6020820190508181035f8301526148478161480e565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f6148a8602483613c00565b91506148b38261484e565b604082019050919050565b5f6020820190508181035f8301526148d58161489c565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f614936602283613c00565b9150614941826148dc565b604082019050919050565b5f6020820190508181035f8301526149638161492a565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000005f82015250565b5f61499e601d83613c00565b91506149a98261496a565b602082019050919050565b5f6020820190508181035f8301526149cb81614992565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f614a2c602583613c00565b9150614a37826149d2565b604082019050919050565b5f6020820190508181035f830152614a5981614a20565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f614aba602383613c00565b9150614ac582614a60565b604082019050919050565b5f6020820190508181035f830152614ae781614aae565b9050919050565b7f54726164696e67206e6f742061637469766500000000000000000000000000005f82015250565b5f614b22601283613c00565b9150614b2d82614aee565b602082019050919050565b5f6020820190508181035f830152614b4f81614b16565b9050919050565b7f596f752061726520657863656564696e67206d617853656c6c416d6f756e74005f82015250565b5f614b8a601f83613c00565b9150614b9582614b56565b602082019050919050565b5f6020820190508181035f830152614bb781614b7e565b9050919050565b7f596f752061726520657863656564696e67206d6178427579416d6f756e7400005f82015250565b5f614bf2601e83613c00565b9150614bfd82614bbe565b602082019050919050565b5f6020820190508181035f830152614c1f81614be6565b9050919050565b7f556e61626c6520746f20657863656564204d61782057616c6c657400000000005f82015250565b5f614c5a601b83613c00565b9150614c6582614c26565b602082019050919050565b5f6020820190508181035f830152614c8781614c4e565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f614cc582613ca0565b9150614cd083613ca0565b925082614ce057614cdf614c8e565b5b828204905092915050565b5f614cf582613ca0565b9150614d0083613ca0565b9250828203905081811115614d1857614d17614201565b5b92915050565b7f4175746f6d61746564206d61726b6574206d616b6572207061697220697320615f8201527f6c72656164792073657420746f20746861742076616c75650000000000000000602082015250565b5f614d78603883613c00565b9150614d8382614d1e565b604082019050919050565b5f6020820190508181035f830152614da581614d6c565b9050919050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320625f8201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b5f614e06602683613c00565b9150614e1182614dac565b604082019050919050565b5f6020820190508181035f830152614e3381614dfa565b9050919050565b7f4661696c656420746f2073656e642045544820746f206465762077616c6c65745f82015250565b5f614e6e602083613c00565b9150614e7982614e3a565b602082019050919050565b5f6020820190508181035f830152614e9b81614e62565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f60208284031215614f1157614f10613b25565b5b5f614f1e8482850161445f565b91505092915050565b5f819050919050565b5f614f4a614f45614f4084614f27565b613ddc565b613ca0565b9050919050565b614f5a81614f30565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b614f9281613b48565b82525050565b5f614fa38383614f89565b60208301905092915050565b5f602082019050919050565b5f614fc582614f60565b614fcf8185614f6a565b9350614fda83614f7a565b805f5b8381101561500a578151614ff18882614f98565b9750614ffc83614faf565b925050600181019050614fdd565b5085935050505092915050565b5f60a08201905061502a5f830188613d64565b6150376020830187614f51565b81810360408301526150498186614fbb565b90506150586060830185613ec2565b6150656080830184613d64565b9695505050505050565b5f60c0820190506150825f830189613ec2565b61508f6020830188613d64565b61509c6040830187614f51565b6150a96060830186614f51565b6150b66080830185613ec2565b6150c360a0830184613d64565b979650505050505050565b5f805f606084860312156150e5576150e4613b25565b5b5f6150f2868287016140b3565b9350506020615103868287016140b3565b9250506040615114868287016140b3565b915050925092509256fea26469706673582212205c1797ee8cca1f8d8649d0dddce15002610ad1f7f1066b58ba967b4a9ce37fa664736f6c63430008150033608060405234801562000010575f80fd5b506040518060400160405280601981526020017f4561726e61746f725f4469766964656e645f547261636b6572000000000000008152506040518060400160405280601981526020017f4561726e61746f725f4469766964656e645f547261636b65720000000000000081525081818160039081620000909190620003fb565b508060049081620000a29190620003fb565b505050620000c5620000b9620000cd60201b60201c565b620000d460201b60201c565b5050620004df565b5f33905090565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f60028204905060018216806200021357607f821691505b602082108103620002295762000228620001ce565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f600883026200028d7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000250565b62000299868362000250565b95508019841693508086168417925050509392505050565b5f819050919050565b5f819050919050565b5f620002e3620002dd620002d784620002b1565b620002ba565b620002b1565b9050919050565b5f819050919050565b620002fe83620002c3565b620003166200030d82620002ea565b8484546200025c565b825550505050565b5f90565b6200032c6200031e565b62000339818484620002f3565b505050565b5b818110156200036057620003545f8262000322565b6001810190506200033f565b5050565b601f821115620003af5762000379816200022f565b620003848462000241565b8101602085101562000394578190505b620003ac620003a38562000241565b8301826200033e565b50505b505050565b5f82821c905092915050565b5f620003d15f1984600802620003b4565b1980831691505092915050565b5f620003eb8383620003c0565b9150826002028217905092915050565b620004068262000197565b67ffffffffffffffff811115620004225762000421620001a1565b5b6200042e8254620001fb565b6200043b82828562000364565b5f60209050601f83116001811462000471575f84156200045c578287015190505b620004688582620003de565b865550620004d7565b601f19841662000481866200022f565b5f5b82811015620004aa5784890151825560018201915060208501945060208101905062000483565b86831015620004ca5784890151620004c6601f891682620003c0565b8355505b6001600288020188555050505b505050505050565b612cd680620004ed5f395ff3fe608060405234801561000f575f80fd5b50600436106101e3575f3560e01c8063715018a61161010d578063a8b9d240116100a0578063e30443bc1161006f578063e30443bc146105df578063ede6ad9c146105fb578063f2fde38b14610617578063fbcbc0f114610633576101e3565b8063a8b9d2401461051f578063a9059cbb1461054f578063aafd847a1461057f578063dd62ed3e146105af576101e3565b806391b89fba116100dc57806391b89fba1461048357806395d89b41146104b35780639e1e0661146104d1578063a457c2d7146104ef576101e3565b8063715018a61461040d578063807ab4f71461041757806385a6b3ae146104475780638da5cb5b14610465576101e3565b806327ce014711610185578063497ec82311610154578063497ec823146103875780634e7b827f146103a35780636a474002146103d357806370a08231146103dd576101e3565b806327ce0147146102ed578063313ce5671461031d578063395093511461033b57806344b6bd9e1461036b576101e3565b80631162c4b6116101c15780631162c4b61461025157806318160ddd1461026f578063226cfa3d1461028d57806323b872dd146102bd576101e3565b80630483f7a0146101e757806306fdde0314610203578063095ea7b314610221575b5f80fd5b61020160048036038101906101fc9190611fb1565b610667565b005b61020b61079b565b6040516102189190612079565b60405180910390f35b61023b600480360381019061023691906120cc565b61082b565b6040516102489190612119565b60405180910390f35b61025961084d565b6040516102669190612141565b60405180910390f35b610277610872565b6040516102849190612169565b60405180910390f35b6102a760048036038101906102a29190612182565b61087b565b6040516102b49190612169565b60405180910390f35b6102d760048036038101906102d291906121ad565b610890565b6040516102e49190612119565b60405180910390f35b61030760048036038101906103029190612182565b6108be565b6040516103149190612169565b60405180910390f35b61032561095e565b6040516103329190612218565b60405180910390f35b610355600480360381019061035091906120cc565b610966565b6040516103629190612119565b60405180910390f35b61038560048036038101906103809190612182565b61099c565b005b6103a1600480360381019061039c9190612231565b6109e7565b005b6103bd60048036038101906103b89190612182565b610ae6565b6040516103ca9190612119565b60405180910390f35b6103db610b03565b005b6103f760048036038101906103f29190612182565b610b0f565b6040516104049190612169565b60405180910390f35b610415610b54565b005b610431600480360381019061042c91906122aa565b610b67565b60405161043e9190612119565b60405180910390f35b61044f610c28565b60405161045c9190612169565b60405180910390f35b61046d610c2e565b60405161047a9190612141565b60405180910390f35b61049d60048036038101906104989190612182565b610c56565b6040516104aa9190612169565b60405180910390f35b6104bb610c67565b6040516104c89190612079565b60405180910390f35b6104d9610cf7565b6040516104e69190612169565b60405180910390f35b610509600480360381019061050491906120cc565b610cfd565b6040516105169190612119565b60405180910390f35b61053960048036038101906105349190612182565b610d72565b6040516105469190612169565b60405180910390f35b610569600480360381019061056491906120cc565b610dd2565b6040516105769190612119565b60405180910390f35b61059960048036038101906105949190612182565b610df4565b6040516105a69190612169565b60405180910390f35b6105c960048036038101906105c49190612231565b610e3a565b6040516105d69190612169565b60405180910390f35b6105f960048036038101906105f491906120cc565b610ebc565b005b610615600480360381019061061091906122d5565b610f21565b005b610631600480360381019061062c9190612182565b611000565b005b61064d60048036038101906106489190612182565b611082565b60405161065e959493929190612300565b60405180910390f35b61066f61115b565b801515600c5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff161515036106c7575f80fd5b80600c5f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600115158115150361073657610731825f6111d9565b610749565b6107488261074384610b0f565b6111d9565b5b8173ffffffffffffffffffffffffffffffffffffffff167fa3c7c11b2e12c4144b09a7813f3393ba646392788638998c97be8da908cf04be8260405161078f9190612119565b60405180910390a25050565b6060600380546107aa9061237e565b80601f01602080910402602001604051908101604052809291908181526020018280546107d69061237e565b80156108215780601f106107f857610100808354040283529160200191610821565b820191905f5260205f20905b81548152906001019060200180831161080457829003601f168201915b5050505050905090565b5f80610835611243565b905061084281858561124a565b600191505092915050565b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f600254905090565b600d602052805f5260405f205f915090505481565b5f8061089a611243565b90506108a785828561140d565b6108b2858585611498565b60019150509392505050565b5f70010000000000000000000000000000000061094d61094860085f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205461093a61093561092488610b0f565b6007546114dd90919063ffffffff16565b611554565b61156e90919063ffffffff16565b6115b5565b6109579190612408565b9050919050565b5f6012905090565b5f80610970611243565b90506109918185856109828589610e3a565b61098c9190612438565b61124a565b600191505092915050565b6109a461115b565b8060065f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6109ef61115b565b8073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb838373ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610a459190612141565b602060405180830381865afa158015610a60573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a84919061247f565b6040518363ffffffff1660e01b8152600401610aa19291906124aa565b6020604051808303815f875af1158015610abd573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610ae191906124e5565b505050565b600c602052805f5260405f205f915054906101000a900460ff1681565b610b0c336115ca565b50565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b610b5c61115b565b610b655f611841565b565b5f610b7061115b565b5f610b7a836115ca565b90505f811115610c1e5742600d5f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508273ffffffffffffffffffffffffffffffffffffffff167f47cee97cb7acd717b3c0aa1435d004cd5b3c8c57d70dbceb4e4458bbd60e39d482604051610c0c9190612169565b60405180910390a26001915050610c23565b5f9150505b919050565b600a5481565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b5f610c6082610d72565b9050919050565b606060048054610c769061237e565b80601f0160208091040260200160405190810160405280929190818152602001828054610ca29061237e565b8015610ced5780601f10610cc457610100808354040283529160200191610ced565b820191905f5260205f20905b815481529060010190602001808311610cd057829003601f168201915b5050505050905090565b600b5481565b5f80610d07611243565b90505f610d148286610e3a565b905083811015610d59576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d5090612580565b60405180910390fd5b610d66828686840361124a565b60019250505092915050565b5f610dcb60095f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054610dbd846108be565b61190490919063ffffffff16565b9050919050565b5f80610ddc611243565b9050610de9818585611498565b600191505092915050565b5f60095f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b610ec461115b565b600c5f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16610f1d57610f1c82826111d9565b5b5050565b610f2961115b565b5f610f32610872565b11610f3b575f80fd5b5f811115610ffd57610f8d610f4e610872565b610f72700100000000000000000000000000000000846114dd90919063ffffffff16565b610f7c9190612408565b60075461194d90919063ffffffff16565b6007819055503373ffffffffffffffffffffffffffffffffffffffff167fa493a9229478c3fcd73f66d2cdeb7f94fd0f341da924d1054236d7845411651182604051610fd99190612169565b60405180910390a2610ff681600a5461194d90919063ffffffff16565b600a819055505b50565b61100861115b565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611076576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161106d9061260e565b60405180910390fd5b61107f81611841565b50565b5f805f805f61108f611ee4565b86815f019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506110cf87610d72565b8160200181815250506110e1876108be565b816040018181525050600d5f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054816060018181525050805f0151816020015182604001518360600151600b54955095509550955095505091939590929450565b611163611243565b73ffffffffffffffffffffffffffffffffffffffff16611181610c2e565b73ffffffffffffffffffffffffffffffffffffffff16146111d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111ce90612676565b60405180910390fd5b565b5f6111e383610b0f565b905080821115611213575f611201828461190490919063ffffffff16565b905061120d84826119aa565b5061123e565b8082101561123d575f61122f838361190490919063ffffffff16565b905061123b8482611a65565b505b5b505050565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036112b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112af90612704565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611326576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161131d90612792565b60405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516114009190612169565b60405180910390a3505050565b5f6114188484610e3a565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146114925781811015611484576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161147b906127fa565b60405180910390fd5b611491848484840361124a565b5b50505050565b5f6114d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114cf90612888565b60405180910390fd5b505050565b5f8083036114ed575f905061154e565b5f82846114fa91906128a6565b90508284826115099190612408565b14611549576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161154090612957565b60405180910390fd5b809150505b92915050565b5f808290505f811215611565575f80fd5b80915050919050565b5f80828461157c919061297e565b90505f831215801561158e5750838112155b806115a357505f831280156115a257508381125b5b6115ab575f80fd5b8091505092915050565b5f808212156115c2575f80fd5b819050919050565b5f806115d583610d72565b90505f8111156118375761162f8160095f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205461194d90919063ffffffff16565b60095f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208190555080600b5f8282546116819190612438565b925050819055508273ffffffffffffffffffffffffffffffffffffffff167fee503bee2bb6a87e57bc57db795f98137327401a0e7b7ce42e37926cc1a9ca4d826040516116ce9190612169565b60405180910390a25f60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb85846040518363ffffffff1660e01b8152600401611733929190612a1a565b6020604051808303815f875af115801561174f573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061177391906124e5565b90508061182d576117ca8260095f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205461190490919063ffffffff16565b60095f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f208190555081600b5f82825461181c9190612a41565b925050819055505f9250505061183c565b819250505061183c565b5f9150505b919050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f61194583836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611b20565b905092915050565b5f80828461195b9190612438565b9050838110156119a0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161199790612abe565b60405180910390fd5b8091505092915050565b6119b48282611b82565b611a206119d46119cf836007546114dd90919063ffffffff16565b611554565b60085f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054611cd090919063ffffffff16565b60085f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055505050565b611a6f8282611d17565b611adb611a8f611a8a836007546114dd90919063ffffffff16565b611554565b60085f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205461156e90919063ffffffff16565b60085f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055505050565b5f838311158290611b67576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b5e9190612079565b60405180910390fd5b505f8385611b759190612a41565b9050809150509392505050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611bf0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611be790612b26565b60405180910390fd5b611bfb5f8383611eda565b8060025f828254611c0c9190612438565b92505081905550805f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055508173ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051611cb99190612169565b60405180910390a3611ccc5f8383611edf565b5050565b5f808284611cde9190612b44565b90505f8312158015611cf05750838113155b80611d0557505f83128015611d0457508381135b5b611d0d575f80fd5b8091505092915050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611d85576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d7c90612bf4565b60405180910390fd5b611d90825f83611eda565b5f805f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905081811015611e13576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e0a90612c82565b60405180910390fd5b8181035f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508160025f82825403925050819055505f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611ec29190612169565b60405180910390a3611ed5835f84611edf565b505050565b505050565b505050565b60405180608001604052805f73ffffffffffffffffffffffffffffffffffffffff1681526020015f81526020015f81526020015f81525090565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f611f4b82611f22565b9050919050565b611f5b81611f41565b8114611f65575f80fd5b50565b5f81359050611f7681611f52565b92915050565b5f8115159050919050565b611f9081611f7c565b8114611f9a575f80fd5b50565b5f81359050611fab81611f87565b92915050565b5f8060408385031215611fc757611fc6611f1e565b5b5f611fd485828601611f68565b9250506020611fe585828601611f9d565b9150509250929050565b5f81519050919050565b5f82825260208201905092915050565b5f5b8381101561202657808201518184015260208101905061200b565b5f8484015250505050565b5f601f19601f8301169050919050565b5f61204b82611fef565b6120558185611ff9565b9350612065818560208601612009565b61206e81612031565b840191505092915050565b5f6020820190508181035f8301526120918184612041565b905092915050565b5f819050919050565b6120ab81612099565b81146120b5575f80fd5b50565b5f813590506120c6816120a2565b92915050565b5f80604083850312156120e2576120e1611f1e565b5b5f6120ef85828601611f68565b9250506020612100858286016120b8565b9150509250929050565b61211381611f7c565b82525050565b5f60208201905061212c5f83018461210a565b92915050565b61213b81611f41565b82525050565b5f6020820190506121545f830184612132565b92915050565b61216381612099565b82525050565b5f60208201905061217c5f83018461215a565b92915050565b5f6020828403121561219757612196611f1e565b5b5f6121a484828501611f68565b91505092915050565b5f805f606084860312156121c4576121c3611f1e565b5b5f6121d186828701611f68565b93505060206121e286828701611f68565b92505060406121f3868287016120b8565b9150509250925092565b5f60ff82169050919050565b612212816121fd565b82525050565b5f60208201905061222b5f830184612209565b92915050565b5f806040838503121561224757612246611f1e565b5b5f61225485828601611f68565b925050602061226585828601611f68565b9150509250929050565b5f61227982611f22565b9050919050565b6122898161226f565b8114612293575f80fd5b50565b5f813590506122a481612280565b92915050565b5f602082840312156122bf576122be611f1e565b5b5f6122cc84828501612296565b91505092915050565b5f602082840312156122ea576122e9611f1e565b5b5f6122f7848285016120b8565b91505092915050565b5f60a0820190506123135f830188612132565b612320602083018761215a565b61232d604083018661215a565b61233a606083018561215a565b612347608083018461215a565b9695505050505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061239557607f821691505b6020821081036123a8576123a7612351565b5b50919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f61241282612099565b915061241d83612099565b92508261242d5761242c6123ae565b5b828204905092915050565b5f61244282612099565b915061244d83612099565b9250828201905080821115612465576124646123db565b5b92915050565b5f81519050612479816120a2565b92915050565b5f6020828403121561249457612493611f1e565b5b5f6124a18482850161246b565b91505092915050565b5f6040820190506124bd5f830185612132565b6124ca602083018461215a565b9392505050565b5f815190506124df81611f87565b92915050565b5f602082840312156124fa576124f9611f1e565b5b5f612507848285016124d1565b91505092915050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f775f8201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b5f61256a602583611ff9565b915061257582612510565b604082019050919050565b5f6020820190508181035f8301526125978161255e565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f6125f8602683611ff9565b91506126038261259e565b604082019050919050565b5f6020820190508181035f830152612625816125ec565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f612660602083611ff9565b915061266b8261262c565b602082019050919050565b5f6020820190508181035f83015261268d81612654565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f6126ee602483611ff9565b91506126f982612694565b604082019050919050565b5f6020820190508181035f83015261271b816126e2565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f61277c602283611ff9565b915061278782612722565b604082019050919050565b5f6020820190508181035f8301526127a981612770565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000005f82015250565b5f6127e4601d83611ff9565b91506127ef826127b0565b602082019050919050565b5f6020820190508181035f830152612811816127d8565b9050919050565b7f4c696e715f4469766964656e645f547261636b65723a204e6f207472616e73665f8201527f65727320616c6c6f776564000000000000000000000000000000000000000000602082015250565b5f612872602b83611ff9565b915061287d82612818565b604082019050919050565b5f6020820190508181035f83015261289f81612866565b9050919050565b5f6128b082612099565b91506128bb83612099565b92508282026128c981612099565b915082820484148315176128e0576128df6123db565b5b5092915050565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f5f8201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b5f612941602183611ff9565b915061294c826128e7565b604082019050919050565b5f6020820190508181035f83015261296e81612935565b9050919050565b5f819050919050565b5f61298882612975565b915061299383612975565b92508282019050828112155f8312168382125f8412151617156129b9576129b86123db565b5b92915050565b5f819050919050565b5f6129e26129dd6129d884611f22565b6129bf565b611f22565b9050919050565b5f6129f3826129c8565b9050919050565b5f612a04826129e9565b9050919050565b612a14816129fa565b82525050565b5f604082019050612a2d5f830185612a0b565b612a3a602083018461215a565b9392505050565b5f612a4b82612099565b9150612a5683612099565b9250828203905081811115612a6e57612a6d6123db565b5b92915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f7700000000005f82015250565b5f612aa8601b83611ff9565b9150612ab382612a74565b602082019050919050565b5f6020820190508181035f830152612ad581612a9c565b9050919050565b7f45524332303a206d696e7420746f20746865207a65726f2061646472657373005f82015250565b5f612b10601f83611ff9565b9150612b1b82612adc565b602082019050919050565b5f6020820190508181035f830152612b3d81612b04565b9050919050565b5f612b4e82612975565b9150612b5983612975565b925082820390508181125f8412168282135f851215161715612b7e57612b7d6123db565b5b92915050565b7f45524332303a206275726e2066726f6d20746865207a65726f206164647265735f8201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b5f612bde602183611ff9565b9150612be982612b84565b604082019050919050565b5f6020820190508181035f830152612c0b81612bd2565b9050919050565b7f45524332303a206275726e20616d6f756e7420657863656564732062616c616e5f8201527f6365000000000000000000000000000000000000000000000000000000000000602082015250565b5f612c6c602283611ff9565b9150612c7782612c12565b604082019050919050565b5f6020820190508181035f830152612c9981612c60565b905091905056fea264697066735822122092df312b129c6afba495c8bb3c41118e6fda8768654b3c126f6a05a8df88a63564736f6c63430008150033000000000000000000000000795a54f00937bb80277a5fb6f26104d35cf9ca6f

Deployed Bytecode

0x608060405260043610610384575f3560e01c806388bdd9be116101d0578063abb8105211610101578063d2fcc0011161009f578063f2fde38b1161006e578063f2fde38b14610ce4578063f66895a314610d0c578063f887ea4014610d37578063f8b45b0514610d615761038b565b8063d2fcc00114610c2e578063dd62ed3e14610c56578063e01af92c14610c92578063e2f4560514610cba5761038b565b8063bdf1436d116100db578063bdf1436d14610b8e578063c024666814610bb6578063c18bc19514610bde578063c851cc3214610c065761038b565b8063abb8105214610aee578063afa4f3b214610b2a578063b62496f514610b525761038b565b80639a7a23d61161016e578063a8aa1b3111610148578063a8aa1b3114610a24578063a8b9d24014610a4e578063a9059cbb14610a8a578063aa35822c14610ac65761038b565b80639a7a23d614610998578063a11a1682146109c0578063a457c2d7146109e85761038b565b80638da5cb5b116101aa5780638da5cb5b146108f25780638ea5220f1461091c57806392929a091461094657806395d89b411461096e5761038b565b806388bdd9be1461087857806388e765ff146108a05780638c9684f9146108ca5761038b565b8063313ce567116102b557806366d602ae11610253578063715018a611610222578063715018a6146107cf57806379b447bd146107e55780637b510fe81461080d578063864701a51461084d5761038b565b806366d602ae146107035780636843cd841461072d5780636ddd17131461076957806370a08231146107935761038b565b806346469afb1161028f57806346469afb1461065d5780634ada218b146106875780634e71d92d146106b15780634fbee193146106c75761038b565b8063313ce567146105cf578063342aa8b5146105f957806339509351146106215761038b565b80631bff7898116103225780632866ed21116102fc5780632866ed21146105295780632c1f5216146105535780632e1ab9041461057d57806330bb4cff146105a55761038b565b80631bff78981461049b5780631f53ac02146104c557806323b872dd146104ed5761038b565b80630a78097d1161035e5780630a78097d1461041d5780630bd05b691461044557806312b77e8a1461045b57806318160ddd146104715761038b565b80630483f7a01461038f57806306fdde03146103b7578063095ea7b3146103e15761038b565b3661038b57005b5f80fd5b34801561039a575f80fd5b506103b560048036038101906103b09190613bb8565b610d8b565b005b3480156103c2575f80fd5b506103cb610e20565b6040516103d89190613c80565b60405180910390f35b3480156103ec575f80fd5b5061040760048036038101906104029190613cd3565b610eb0565b6040516104149190613d20565b60405180910390f35b348015610428575f80fd5b50610443600480360381019061043e9190613d39565b610ed2565b005b348015610450575f80fd5b50610459610fd7565b005b348015610466575f80fd5b5061046f611064565b005b34801561047c575f80fd5b50610485611106565b6040516104929190613d73565b60405180910390f35b3480156104a6575f80fd5b506104af61110f565b6040516104bc9190613d73565b60405180910390f35b3480156104d0575f80fd5b506104eb60048036038101906104e69190613d39565b611115565b005b3480156104f8575f80fd5b50610513600480360381019061050e9190613d8c565b611160565b6040516105209190613d20565b60405180910390f35b348015610534575f80fd5b5061053d61118e565b60405161054a9190613d20565b60405180910390f35b34801561055e575f80fd5b506105676111a1565b6040516105749190613e37565b60405180910390f35b348015610588575f80fd5b506105a3600480360381019061059e9190613d39565b6111c6565b005b3480156105b0575f80fd5b506105b9611258565b6040516105c69190613d73565b60405180910390f35b3480156105da575f80fd5b506105e36112ec565b6040516105f09190613e6b565b60405180910390f35b348015610604575f80fd5b5061061f600480360381019061061a9190613bb8565b6112f4565b005b34801561062c575f80fd5b5061064760048036038101906106429190613cd3565b6113ac565b6040516106549190613d20565b60405180910390f35b348015610668575f80fd5b506106716113e2565b60405161067e9190613d73565b60405180910390f35b348015610692575f80fd5b5061069b6113e8565b6040516106a89190613d20565b60405180910390f35b3480156106bc575f80fd5b506106c56113fb565b005b3480156106d2575f80fd5b506106ed60048036038101906106e89190613d39565b6114e7565b6040516106fa9190613d20565b60405180910390f35b34801561070e575f80fd5b50610717611539565b6040516107249190613d73565b60405180910390f35b348015610738575f80fd5b50610753600480360381019061074e9190613d39565b61153f565b6040516107609190613d73565b60405180910390f35b348015610774575f80fd5b5061077d6115e0565b60405161078a9190613d20565b60405180910390f35b34801561079e575f80fd5b506107b960048036038101906107b49190613d39565b6115f3565b6040516107c69190613d73565b60405180910390f35b3480156107da575f80fd5b506107e3611638565b005b3480156107f0575f80fd5b5061080b60048036038101906108069190613e84565b61164b565b005b348015610818575f80fd5b50610833600480360381019061082e9190613d39565b611715565b604051610844959493929190613ed1565b60405180910390f35b348015610858575f80fd5b506108616117c6565b60405161086f929190613f22565b60405180910390f35b348015610883575f80fd5b5061089e60048036038101906108999190613d39565b6117d7565b005b3480156108ab575f80fd5b506108b46119f3565b6040516108c19190613d73565b60405180910390f35b3480156108d5575f80fd5b506108f060048036038101906108eb9190613d39565b6119f9565b005b3480156108fd575f80fd5b50610906611a8d565b6040516109139190613f49565b60405180910390f35b348015610927575f80fd5b50610930611ab5565b60405161093d9190613f49565b60405180910390f35b348015610951575f80fd5b5061096c60048036038101906109679190613f62565b611ada565b005b348015610979575f80fd5b50610982611aff565b60405161098f9190613c80565b60405180910390f35b3480156109a3575f80fd5b506109be60048036038101906109b99190613bb8565b611b8f565b005b3480156109cb575f80fd5b506109e660048036038101906109e19190613e84565b611ba5565b005b3480156109f3575f80fd5b50610a0e6004803603810190610a099190613cd3565b611c33565b604051610a1b9190613d20565b60405180910390f35b348015610a2f575f80fd5b50610a38611ca8565b604051610a459190613f49565b60405180910390f35b348015610a59575f80fd5b50610a746004803603810190610a6f9190613d39565b611ccd565b604051610a819190613d73565b60405180910390f35b348015610a95575f80fd5b50610ab06004803603810190610aab9190613cd3565b611d6e565b604051610abd9190613d20565b60405180910390f35b348015610ad1575f80fd5b50610aec6004803603810190610ae79190613e84565b611d90565b005b348015610af9575f80fd5b50610b146004803603810190610b0f9190613d39565b611e29565b604051610b219190613d20565b60405180910390f35b348015610b35575f80fd5b50610b506004803603810190610b4b9190613f8d565b611e46565b005b348015610b5d575f80fd5b50610b786004803603810190610b739190613d39565b611e6b565b604051610b859190613d20565b60405180910390f35b348015610b99575f80fd5b50610bb46004803603810190610baf9190613f8d565b611e88565b005b348015610bc1575f80fd5b50610bdc6004803603810190610bd79190613bb8565b611fe4565b005b348015610be9575f80fd5b50610c046004803603810190610bff9190613f8d565b612121565b005b348015610c11575f80fd5b50610c2c6004803603810190610c279190613d39565b61218c565b005b348015610c39575f80fd5b50610c546004803603810190610c4f9190613bb8565b6121d7565b005b348015610c61575f80fd5b50610c7c6004803603810190610c779190613fb8565b612237565b604051610c899190613d73565b60405180910390f35b348015610c9d575f80fd5b50610cb86004803603810190610cb39190613f62565b6122b9565b005b348015610cc5575f80fd5b50610cce6122de565b604051610cdb9190613d73565b60405180910390f35b348015610cef575f80fd5b50610d0a6004803603810190610d059190613d39565b6122e4565b005b348015610d17575f80fd5b50610d20612366565b604051610d2e929190613f22565b60405180910390f35b348015610d42575f80fd5b50610d4b612377565b604051610d589190614016565b60405180910390f35b348015610d6c575f80fd5b50610d7561239c565b604051610d829190613d73565b60405180910390f35b610d936123a2565b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630483f7a083836040518363ffffffff1660e01b8152600401610def92919061402f565b5f604051808303815f87803b158015610e06575f80fd5b505af1158015610e18573d5f803e3d5ffd5b505050505050565b606060038054610e2f90614083565b80601f0160208091040260200160405190810160405280929190818152602001828054610e5b90614083565b8015610ea65780601f10610e7d57610100808354040283529160200191610ea6565b820191905f5260205f20905b815481529060010190602001808311610e8957829003601f168201915b5050505050905090565b5f80610eba612420565b9050610ec7818585612427565b600191505092915050565b610eda6123a2565b8073ffffffffffffffffffffffffffffffffffffffff1663a9059cbb610efe611a8d565b8373ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610f379190613f49565b602060405180830381865afa158015610f52573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610f7691906140c7565b6040518363ffffffff1660e01b8152600401610f939291906140f2565b6020604051808303815f875af1158015610faf573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610fd3919061412d565b5050565b610fdf6123a2565b600760179054906101000a900460ff161561102f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611026906141a2565b60405180910390fd5b6001600760176101000a81548160ff02191690831515021790555061105660056014611d90565b61106260056014611ba5565b565b61106c6123a2565b5f4790505f60095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16826040516110b6906141ed565b5f6040518083038185875af1925050503d805f81146110f0576040519150601f19603f3d011682016040523d82523d5f602084013e6110f5565b606091505b5050905080611102575f80fd5b5050565b5f600254905090565b60135481565b61111d6123a2565b8060095f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b5f8061116a612420565b90506111778582856125ea565b611182858585612675565b60019150509392505050565b600760169054906101000a900460ff1681565b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6111ce6123a2565b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166344b6bd9e826040518263ffffffff1660e01b81526004016112289190613f49565b5f604051808303815f87803b15801561123f575f80fd5b505af1158015611251573d5f803e3d5ffd5b5050505050565b5f60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166385a6b3ae6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156112c3573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906112e791906140c7565b905090565b5f6012905090565b6112fc6123a2565b80151560145f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16151503611354575f80fd5b8060145f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b5f806113b6612420565b90506113d78185856113c88589612237565b6113d2919061422e565b612427565b600191505092915050565b60125481565b600760179054906101000a900460ff1681565b600760169054906101000a900460ff1661144a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611441906142ab565b60405180910390fd5b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663807ab4f7336040518263ffffffff1660e01b81526004016114a491906142e9565b6020604051808303815f875af11580156114c0573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906114e4919061412d565b50565b5f60155f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff169050919050565b600c5481565b5f60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231836040518263ffffffff1660e01b815260040161159a9190613f49565b602060405180830381865afa1580156115b5573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906115d991906140c7565b9050919050565b600760159054906101000a900460ff1681565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b6116406123a2565b6116495f612f66565b565b6116536123a2565b6161a8821015611698576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161168f90614372565b60405180910390fd5b6161a88110156116dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116d490614400565b60405180910390fd5b670de0b6b3a7640000826116f1919061441e565b600b81905550670de0b6b3a76400008161170b919061441e565b600c819055505050565b5f805f805f60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663fbcbc0f1876040518263ffffffff1660e01b81526004016117749190613f49565b60a060405180830381865afa15801561178f573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906117b39190614473565b9450945094509450945091939590929450565b600e805f0154908060010154905082565b6117df6123a2565b5f8190508073ffffffffffffffffffffffffffffffffffffffff16630483f7a08260016040518363ffffffff1660e01b815260040161181f92919061402f565b5f604051808303815f87803b158015611836575f80fd5b505af1158015611848573d5f803e3d5ffd5b505050508073ffffffffffffffffffffffffffffffffffffffff16630483f7a03060016040518363ffffffff1660e01b815260040161188892919061402f565b5f604051808303815f87803b15801561189f575f80fd5b505af11580156118b1573d5f803e3d5ffd5b505050508073ffffffffffffffffffffffffffffffffffffffff16630483f7a06118d9611a8d565b60016040518363ffffffff1660e01b81526004016118f892919061402f565b5f604051808303815f87803b15801561190f575f80fd5b505af1158015611921573d5f803e3d5ffd5b505050508073ffffffffffffffffffffffffffffffffffffffff16630483f7a060065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660016040518363ffffffff1660e01b815260040161198292919061402f565b5f604051808303815f87803b158015611999575f80fd5b505af11580156119ab573d5f803e3d5ffd5b505050508060085f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b600b5481565b611a016123a2565b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663497ec82333836040518363ffffffff1660e01b8152600401611a5d9291906144ea565b5f604051808303815f87803b158015611a74575f80fd5b505af1158015611a86573d5f803e3d5ffd5b5050505050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611ae26123a2565b80600760166101000a81548160ff02191690831515021790555050565b606060048054611b0e90614083565b80601f0160208091040260200160405190810160405280929190818152602001828054611b3a90614083565b8015611b855780601f10611b5c57610100808354040283529160200191611b85565b820191905f5260205f20905b815481529060010190602001808311611b6857829003601f168201915b5050505050905090565b611b976123a2565b611ba18282613029565b5050565b611bad6123a2565b6019821115611bf1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611be89061455b565b60405180910390fd5b60405180604001604052808381526020018281525060105f820151815f0155602082015181600101559050508082611c29919061422e565b6013819055505050565b5f80611c3d612420565b90505f611c4a8286612237565b905083811015611c8f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c86906145e9565b60405180910390fd5b611c9c8286868403612427565b60019250505092915050565b60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a8b9d240836040518263ffffffff1660e01b8152600401611d289190613f49565b602060405180830381865afa158015611d43573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611d6791906140c7565b9050919050565b5f80611d78612420565b9050611d85818585612675565b600191505092915050565b611d986123a2565b60198183611da6919061422e565b1115611de7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dde9061455b565b60405180910390fd5b604051806040016040528083815260200182815250600e5f820151815f0155602082015181600101559050508082611e1f919061422e565b6012819055505050565b6014602052805f5260405f205f915054906101000a900460ff1681565b611e4e6123a2565b670de0b6b3a764000081611e62919061441e565b600a8190555050565b6016602052805f5260405f205f915054906101000a900460ff1681565b611e906123a2565b5f60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd3360085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16856040518463ffffffff1660e01b8152600401611f1093929190614607565b6020604051808303815f875af1158015611f2c573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611f50919061412d565b90508015611fe05760085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ede6ad9c836040518263ffffffff1660e01b8152600401611fb29190613d73565b5f604051808303815f87803b158015611fc9575f80fd5b505af1158015611fdb573d5f803e3d5ffd5b505050505b5050565b611fec6123a2565b80151560155f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1615150361207b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612072906146ac565b60405180910390fd5b8060155f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff167f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7826040516121159190613d20565b60405180910390a25050565b6121296123a2565b620186a081101561216f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121669061473a565b60405180910390fd5b670de0b6b3a764000081612183919061441e565b600d8190555050565b6121946123a2565b8060065f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6121df6123a2565b8060175f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505050565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b6122c16123a2565b80600760156101000a81548160ff02191690831515021790555050565b600a5481565b6122ec6123a2565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361235a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612351906147c8565b60405180910390fd5b61236381612f66565b50565b6010805f0154908060010154905082565b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600d5481565b6123aa612420565b73ffffffffffffffffffffffffffffffffffffffff166123c8611a8d565b73ffffffffffffffffffffffffffffffffffffffff161461241e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161241590614830565b60405180910390fd5b565b5f33905090565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603612495576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161248c906148be565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612503576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124fa9061494c565b60405180910390fd5b8060015f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516125dd9190613d73565b60405180910390a3505050565b5f6125f58484612237565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811461266f5781811015612661576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612658906149b4565b60405180910390fd5b61266e8484848403612427565b5b50505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036126e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126da90614a42565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603612751576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161274890614ad0565b60405180910390fd5b60155f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff161580156127ef575060155f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b80156128085750600760149054906101000a900460ff16155b15612a3357600760179054906101000a900460ff1661285c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161285390614b38565b60405180910390fd5b60165f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16156128f557600c548111156128f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128e790614ba0565b60405180910390fd5b61298b565b60165f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff161561298a57600b54811115612989576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161298090614c08565b60405180910390fd5b5b5b60175f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16612a3257600d546129e5836115f3565b826129f0919061422e565b1115612a31576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a2890614c70565b60405180910390fd5b5b5b5f8103612a4a57612a4583835f6131e7565b612f61565b5f612a54306115f3565b90505f600a548210159050808015612a795750600760149054906101000a900460ff16155b8015612a915750600760159054906101000a900460ff165b8015612ae3575060165f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b8015612b36575060155f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b8015612b89575060155f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15612bda576001600760146101000a81548160ff0219169083151502179055505f6013541115612bbf57612bbe600a54613453565b5b5f600760146101000a81548160ff0219169083151502179055505b5f600760149054906101000a900460ff1615905060155f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1680612c89575060155f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff165b15612c92575f90505b60165f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16158015612d30575060165f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16155b15612d39575f90505b8015612e38575f60165f8773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1615612db057606460135486612d9f919061441e565b612da99190614cbb565b9050612e1d565b60165f8873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff1615612e1c57606460125486612e0f919061441e565b612e199190614cbb565b90505b5b8085612e299190614ceb565b9450612e368730836131e7565b505b612e438686866131e7565b60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e30443bc87612e8a896115f3565b6040518363ffffffff1660e01b8152600401612ea79291906140f2565b5f604051808303815f87803b158015612ebe575f80fd5b505af1925050508015612ecf575060015b5060085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e30443bc86612f17886115f3565b6040518363ffffffff1660e01b8152600401612f349291906140f2565b5f604051808303815f87803b158015612f4b575f80fd5b505af1925050508015612f5c575060015b505050505b505050565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b80151560165f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff161515036130b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130af90614d8e565b60405180910390fd5b8060165f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550801561319d5760085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630483f7a08360016040518363ffffffff1660e01b815260040161316f92919061402f565b5f604051808303815f87803b158015613186575f80fd5b505af1158015613198573d5f803e3d5ffd5b505050505b8015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603613255576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161324c90614a42565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036132c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132ba90614ad0565b60405180910390fd5b6132ce83838361380c565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905081811015613351576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161334890614e1c565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550815f808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161343a9190613d73565b60405180910390a361344d848484613811565b50505050565b5f600260135460105f015484613469919061441e565b6134739190614cbb565b61347d9190614cbb565b90505f600260135460105f015485613495919061441e565b61349f9190614cbb565b6134a99190614cbb565b90505f601354601060010154856134c0919061441e565b6134ca9190614cbb565b90506134d583613816565b5f4790505f8111156134ec576134eb8382613a4c565b5b6134f582613816565b5f4790505f8190505f8111156135d0575f60095f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168260405161354b906141ed565b5f6040518083038185875af1925050503d805f8114613585576040519150601f19603f3d011682016040523d82523d5f602084013e61358a565b606091505b50509050806135ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016135c590614e84565b60405180910390fd5b505b5f60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161362b9190613f49565b602060405180830381865afa158015613646573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061366a91906140c7565b90505f8190505f811115613801575f60075f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb60085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846040518363ffffffff1660e01b81526004016136f69291906140f2565b6020604051808303815f875af1158015613712573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613736919061412d565b905080156137ff5760085f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ede6ad9c836040518263ffffffff1660e01b81526004016137989190613d73565b5f604051808303815f87803b1580156137af575f80fd5b505af11580156137c1573d5f803e3d5ffd5b505050507f80195cc573b02cc48460cbca6e6e4cc85ddb91959d946e1c3025ea3d87942dc38a836040516137f6929190613f22565b60405180910390a15b505b505050505050505050565b505050565b505050565b5f600267ffffffffffffffff81111561383257613831614ea2565b5b6040519080825280602002602001820160405280156138605781602001602082028036833780820191505090505b50905030815f8151811061387757613876614ecf565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff168152505060065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561391b573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061393f9190614efc565b8160018151811061395357613952614ecf565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff16815250506139b93060065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684612427565b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663791ac947835f8430426040518663ffffffff1660e01b8152600401613a1b959493929190615017565b5f604051808303815f87803b158015613a32575f80fd5b505af1158015613a44573d5f803e3d5ffd5b505050505050565b613a783060065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684612427565b60065f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663f305d7198230855f8030426040518863ffffffff1660e01b8152600401613add9695949392919061506f565b60606040518083038185885af1158015613af9573d5f803e3d5ffd5b50505050506040513d601f19601f82011682018060405250810190613b1e91906150ce565b5050505050565b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f613b5282613b29565b9050919050565b613b6281613b48565b8114613b6c575f80fd5b50565b5f81359050613b7d81613b59565b92915050565b5f8115159050919050565b613b9781613b83565b8114613ba1575f80fd5b50565b5f81359050613bb281613b8e565b92915050565b5f8060408385031215613bce57613bcd613b25565b5b5f613bdb85828601613b6f565b9250506020613bec85828601613ba4565b9150509250929050565b5f81519050919050565b5f82825260208201905092915050565b5f5b83811015613c2d578082015181840152602081019050613c12565b5f8484015250505050565b5f601f19601f8301169050919050565b5f613c5282613bf6565b613c5c8185613c00565b9350613c6c818560208601613c10565b613c7581613c38565b840191505092915050565b5f6020820190508181035f830152613c988184613c48565b905092915050565b5f819050919050565b613cb281613ca0565b8114613cbc575f80fd5b50565b5f81359050613ccd81613ca9565b92915050565b5f8060408385031215613ce957613ce8613b25565b5b5f613cf685828601613b6f565b9250506020613d0785828601613cbf565b9150509250929050565b613d1a81613b83565b82525050565b5f602082019050613d335f830184613d11565b92915050565b5f60208284031215613d4e57613d4d613b25565b5b5f613d5b84828501613b6f565b91505092915050565b613d6d81613ca0565b82525050565b5f602082019050613d865f830184613d64565b92915050565b5f805f60608486031215613da357613da2613b25565b5b5f613db086828701613b6f565b9350506020613dc186828701613b6f565b9250506040613dd286828701613cbf565b9150509250925092565b5f819050919050565b5f613dff613dfa613df584613b29565b613ddc565b613b29565b9050919050565b5f613e1082613de5565b9050919050565b5f613e2182613e06565b9050919050565b613e3181613e17565b82525050565b5f602082019050613e4a5f830184613e28565b92915050565b5f60ff82169050919050565b613e6581613e50565b82525050565b5f602082019050613e7e5f830184613e5c565b92915050565b5f8060408385031215613e9a57613e99613b25565b5b5f613ea785828601613cbf565b9250506020613eb885828601613cbf565b9150509250929050565b613ecb81613b48565b82525050565b5f60a082019050613ee45f830188613ec2565b613ef16020830187613d64565b613efe6040830186613d64565b613f0b6060830185613d64565b613f186080830184613d64565b9695505050505050565b5f604082019050613f355f830185613d64565b613f426020830184613d64565b9392505050565b5f602082019050613f5c5f830184613ec2565b92915050565b5f60208284031215613f7757613f76613b25565b5b5f613f8484828501613ba4565b91505092915050565b5f60208284031215613fa257613fa1613b25565b5b5f613faf84828501613cbf565b91505092915050565b5f8060408385031215613fce57613fcd613b25565b5b5f613fdb85828601613b6f565b9250506020613fec85828601613b6f565b9150509250929050565b5f61400082613e06565b9050919050565b61401081613ff6565b82525050565b5f6020820190506140295f830184614007565b92915050565b5f6040820190506140425f830185613ec2565b61404f6020830184613d11565b9392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061409a57607f821691505b6020821081036140ad576140ac614056565b5b50919050565b5f815190506140c181613ca9565b92915050565b5f602082840312156140dc576140db613b25565b5b5f6140e9848285016140b3565b91505092915050565b5f6040820190506141055f830185613ec2565b6141126020830184613d64565b9392505050565b5f8151905061412781613b8e565b92915050565b5f6020828403121561414257614141613b25565b5b5f61414f84828501614119565b91505092915050565b7f54726164696e6720616c726561647920656e61626c65640000000000000000005f82015250565b5f61418c601783613c00565b915061419782614158565b602082019050919050565b5f6020820190508181035f8301526141b981614180565b9050919050565b5f81905092915050565b50565b5f6141d85f836141c0565b91506141e3826141ca565b5f82019050919050565b5f6141f7826141cd565b9150819050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f61423882613ca0565b915061424383613ca0565b925082820190508082111561425b5761425a614201565b5b92915050565b7f436c61696d206e6f7420656e61626c65640000000000000000000000000000005f82015250565b5f614295601183613c00565b91506142a082614261565b602082019050919050565b5f6020820190508181035f8301526142c281614289565b9050919050565b5f6142d382613b29565b9050919050565b6142e3816142c9565b82525050565b5f6020820190506142fc5f8301846142da565b92915050565b7f43616e6e6f7420736574206d6178627579206c6f776572207468616e20302e325f8201527f3525200000000000000000000000000000000000000000000000000000000000602082015250565b5f61435c602383613c00565b915061436782614302565b604082019050919050565b5f6020820190508181035f83015261438981614350565b9050919050565b7f43616e6e6f7420736574206d617873656c6c206c6f776572207468616e20302e5f8201527f3235252000000000000000000000000000000000000000000000000000000000602082015250565b5f6143ea602483613c00565b91506143f582614390565b604082019050919050565b5f6020820190508181035f830152614417816143de565b9050919050565b5f61442882613ca0565b915061443383613ca0565b925082820261444181613ca0565b9150828204841483151761445857614457614201565b5b5092915050565b5f8151905061446d81613b59565b92915050565b5f805f805f60a0868803121561448c5761448b613b25565b5b5f6144998882890161445f565b95505060206144aa888289016140b3565b94505060406144bb888289016140b3565b93505060606144cc888289016140b3565b92505060806144dd888289016140b3565b9150509295509295909350565b5f6040820190506144fd5f830185613ec2565b61450a6020830184613ec2565b9392505050565b7f466565206d757374206265203c3d2032352500000000000000000000000000005f82015250565b5f614545601283613c00565b915061455082614511565b602082019050919050565b5f6020820190508181035f83015261457281614539565b9050919050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f775f8201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b5f6145d3602583613c00565b91506145de82614579565b604082019050919050565b5f6020820190508181035f830152614600816145c7565b9050919050565b5f60608201905061461a5f830186613ec2565b6146276020830185613ec2565b6146346040830184613d64565b949350505050565b7f4163636f756e7420697320616c7265616479207468652076616c7565206f66205f8201527f276578636c756465642700000000000000000000000000000000000000000000602082015250565b5f614696602a83613c00565b91506146a18261463c565b604082019050919050565b5f6020820190508181035f8301526146c38161468a565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e205f8201527f3125000000000000000000000000000000000000000000000000000000000000602082015250565b5f614724602283613c00565b915061472f826146ca565b604082019050919050565b5f6020820190508181035f83015261475181614718565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f6147b2602683613c00565b91506147bd82614758565b604082019050919050565b5f6020820190508181035f8301526147df816147a6565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f61481a602083613c00565b9150614825826147e6565b602082019050919050565b5f6020820190508181035f8301526148478161480e565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f206164645f8201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b5f6148a8602483613c00565b91506148b38261484e565b604082019050919050565b5f6020820190508181035f8301526148d58161489c565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f2061646472655f8201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b5f614936602283613c00565b9150614941826148dc565b604082019050919050565b5f6020820190508181035f8301526149638161492a565b9050919050565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000005f82015250565b5f61499e601d83613c00565b91506149a98261496a565b602082019050919050565b5f6020820190508181035f8301526149cb81614992565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f2061645f8201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b5f614a2c602583613c00565b9150614a37826149d2565b604082019050919050565b5f6020820190508181035f830152614a5981614a20565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f20616464725f8201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b5f614aba602383613c00565b9150614ac582614a60565b604082019050919050565b5f6020820190508181035f830152614ae781614aae565b9050919050565b7f54726164696e67206e6f742061637469766500000000000000000000000000005f82015250565b5f614b22601283613c00565b9150614b2d82614aee565b602082019050919050565b5f6020820190508181035f830152614b4f81614b16565b9050919050565b7f596f752061726520657863656564696e67206d617853656c6c416d6f756e74005f82015250565b5f614b8a601f83613c00565b9150614b9582614b56565b602082019050919050565b5f6020820190508181035f830152614bb781614b7e565b9050919050565b7f596f752061726520657863656564696e67206d6178427579416d6f756e7400005f82015250565b5f614bf2601e83613c00565b9150614bfd82614bbe565b602082019050919050565b5f6020820190508181035f830152614c1f81614be6565b9050919050565b7f556e61626c6520746f20657863656564204d61782057616c6c657400000000005f82015250565b5f614c5a601b83613c00565b9150614c6582614c26565b602082019050919050565b5f6020820190508181035f830152614c8781614c4e565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f614cc582613ca0565b9150614cd083613ca0565b925082614ce057614cdf614c8e565b5b828204905092915050565b5f614cf582613ca0565b9150614d0083613ca0565b9250828203905081811115614d1857614d17614201565b5b92915050565b7f4175746f6d61746564206d61726b6574206d616b6572207061697220697320615f8201527f6c72656164792073657420746f20746861742076616c75650000000000000000602082015250565b5f614d78603883613c00565b9150614d8382614d1e565b604082019050919050565b5f6020820190508181035f830152614da581614d6c565b9050919050565b7f45524332303a207472616e7366657220616d6f756e74206578636565647320625f8201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b5f614e06602683613c00565b9150614e1182614dac565b604082019050919050565b5f6020820190508181035f830152614e3381614dfa565b9050919050565b7f4661696c656420746f2073656e642045544820746f206465762077616c6c65745f82015250565b5f614e6e602083613c00565b9150614e7982614e3a565b602082019050919050565b5f6020820190508181035f830152614e9b81614e62565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f60208284031215614f1157614f10613b25565b5b5f614f1e8482850161445f565b91505092915050565b5f819050919050565b5f614f4a614f45614f4084614f27565b613ddc565b613ca0565b9050919050565b614f5a81614f30565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b614f9281613b48565b82525050565b5f614fa38383614f89565b60208301905092915050565b5f602082019050919050565b5f614fc582614f60565b614fcf8185614f6a565b9350614fda83614f7a565b805f5b8381101561500a578151614ff18882614f98565b9750614ffc83614faf565b925050600181019050614fdd565b5085935050505092915050565b5f60a08201905061502a5f830188613d64565b6150376020830187614f51565b81810360408301526150498186614fbb565b90506150586060830185613ec2565b6150656080830184613d64565b9695505050505050565b5f60c0820190506150825f830189613ec2565b61508f6020830188613d64565b61509c6040830187614f51565b6150a96060830186614f51565b6150b66080830185613ec2565b6150c360a0830184613d64565b979650505050505050565b5f805f606084860312156150e5576150e4613b25565b5b5f6150f2868287016140b3565b9350506020615103868287016140b3565b9250506040615114868287016140b3565b915050925092509256fea26469706673582212205c1797ee8cca1f8d8649d0dddce15002610ad1f7f1066b58ba967b4a9ce37fa664736f6c63430008150033

Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

000000000000000000000000795a54f00937bb80277a5fb6f26104d35cf9ca6f

-----Decoded View---------------
Arg [0] : _developerwallet (address): 0x795A54F00937Bb80277a5fB6f26104D35CF9Ca6F

-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 000000000000000000000000795a54f00937bb80277a5fb6f26104d35cf9ca6f


Deployed Bytecode Sourcemap

28772:15208:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34874:170;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5987:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6917:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33565:209;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35880:251;;;;;;;;;;;;;:::i;:::-;;33867:204;;;;;;;;;;;;;:::i;:::-;;6306:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29451:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35052:98;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;7126:261;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28952:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29018:46;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36490:117;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37408:141;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6205:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36344:138;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;7395:238;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29414:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28983:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32448:149;;;;;;;;;;;;;:::i;:::-;;37557:126;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29180:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37883:171;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28915:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6422:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1737:103;;;;;;;;;;;;;:::i;:::-;;32798:343;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38062:278;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;;:::i;:::-;;;;;;;;29327:35;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;31818:578;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29146:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34079:160;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1096:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29073:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36139:95;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6093:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36677:171;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35398:229;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;7641:436;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28859:19;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37691:184;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6557:193;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35158:232;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29491:38;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33149:119;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29597:57;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42638:320;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34487:327;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32605:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34247:113;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33276:165;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6758:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35773:99;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29106:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1995:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29369:36;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;28824:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29215:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34874:170;982:13;:11;:13::i;:::-;34984:15:::1;;;;;;;;;;;:36;;;35021:7;35030:5;34984:52;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;34874:170:::0;;:::o;5987:100::-;6041:13;6074:5;6067:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5987:100;:::o;6917:201::-;7000:4;7017:13;7033:12;:10;:12::i;:::-;7017:28;;7056:32;7065:5;7072:7;7081:6;7056:8;:32::i;:::-;7106:4;7099:11;;;6917:201;;;;:::o;33565:209::-;982:13;:11;:13::i;:::-;33651:12:::1;33644:29;;;33688:7;:5;:7::i;:::-;33717:12;33710:30;;;33749:4;33710:45;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;33644:122;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;33565:209:::0;:::o;35880:251::-;982:13;:11;:13::i;:::-;35946:14:::1;;;;;;;;;;;35945:15;35937:51;;;;;;;;;;;;:::i;:::-;;;;;;;;;36016:4;35999:14;;:21;;;;;;;;;;;;;;;;;;36031:17;36043:1;36045:2;36031:11;:17::i;:::-;36059:18;36072:1;36074:2;36059:12;:18::i;:::-;35880:251::o:0;33867:204::-;982:13;:11;:13::i;:::-;33918:18:::1;33939:21;33918:42;;33972:12;33998:9;;;;;;;;;;;33990:23;;34021:10;33990:46;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33971:65;;;34055:7;34047:16;;;::::0;::::1;;33907:164;;33867:204::o:0;6306:108::-;6367:7;6394:12;;6387:19;;6306:108;:::o;29451:31::-;;;;:::o;35052:98::-;982:13;:11;:13::i;:::-;35133:9:::1;35121;;:21;;;;;;;;;;;;;;;;;;35052:98:::0;:::o;7126:261::-;7223:4;7240:15;7258:12;:10;:12::i;:::-;7240:30;;7281:38;7297:4;7303:7;7312:6;7281:15;:38::i;:::-;7330:27;7340:4;7346:2;7350:6;7330:9;:27::i;:::-;7375:4;7368:11;;;7126:261;;;;;:::o;28952:24::-;;;;;;;;;;;;;:::o;29018:46::-;;;;;;;;;;;;;:::o;36490:117::-;982:13;:11;:13::i;:::-;36559:15:::1;;;;;;;;;;;:30;;;36590:8;36559:40;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;36490:117:::0;:::o;37408:141::-;37471:7;37498:15;;;;;;;;;;;:41;;;:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;37491:50;;37408:141;:::o;6205:93::-;6263:5;6288:2;6281:9;;6205:93;:::o;36344:138::-;982:13;:11;:13::i;:::-;36438:5:::1;36423:20;;:6;:11;36430:3;36423:11;;;;;;;;;;;;;;;;;;;;;;;;;:20;;::::0;36415:29:::1;;;::::0;::::1;;36469:5;36455:6;:11;36462:3;36455:11;;;;;;;;;;;;;;;;:19;;;;;;;;;;;;;;;;;;36344:138:::0;;:::o;7395:238::-;7483:4;7500:13;7516:12;:10;:12::i;:::-;7500:28;;7539:64;7548:5;7555:7;7592:10;7564:25;7574:5;7581:7;7564:9;:25::i;:::-;:38;;;;:::i;:::-;7539:8;:64::i;:::-;7621:4;7614:11;;;7395:238;;;;:::o;29414:30::-;;;;:::o;28983:26::-;;;;;;;;;;;;;:::o;32448:149::-;32493:12;;;;;;;;;;;32485:42;;;;;;;;;;;;:::i;:::-;;;;;;;;;32538:15;;;;;;;;;;;:30;;;32577:10;32538:51;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;32448:149::o;37557:126::-;37623:4;37647:19;:28;37667:7;37647:28;;;;;;;;;;;;;;;;;;;;;;;;;37640:35;;37557:126;;;:::o;29180:28::-;;;;:::o;37883:171::-;37980:7;38012:15;;;;;;;;;;;:25;;;38038:7;38012:34;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;38005:41;;37883:171;;;:::o;28915:30::-;;;;;;;;;;;;;:::o;6422:127::-;6496:7;6523:9;:18;6533:7;6523:18;;;;;;;;;;;;;;;;6516:25;;6422:127;;;:::o;1737:103::-;982:13;:11;:13::i;:::-;1802:30:::1;1829:1;1802:18;:30::i;:::-;1737:103::o:0;32798:343::-;982:13;:11;:13::i;:::-;32926:6:::1;32916;:16;;32908:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;33002:6;32991:7;:17;;32983:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;33084:6;33075;:15;;;;:::i;:::-;33060:12;:30;;;;33127:6;33117:7;:16;;;;:::i;:::-;33101:13;:32;;;;32798:343:::0;;:::o;38062:278::-;38167:7;38189;38211;38233;38255;38297:15;;;;;;;;;;;:26;;;38324:7;38297:35;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;38290:42;;;;;;;;;;38062:278;;;;;;;:::o;29327:35::-;;;;;;;;;;;;;;:::o;31818:578::-;982:13;:11;:13::i;:::-;31897:42:::1;31988:10;31897:113;;32021:18;:39;;;32083:18;32117:4;32021:111;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;32143:18;:39;;;32191:4;32198;32143:60;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;32214:18;:39;;;32254:7;:5;:7::i;:::-;32263:4;32214:54;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;32279:18;:39;;;32327:6;;;;;;;;;;;32336:4;32279:62;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;32370:18;32352:15;;:36;;;;;;;;;;;;;;;;;;31886:510;31818:578:::0;:::o;29146:27::-;;;;:::o;34079:160::-;982:13;:11;:13::i;:::-;34165:15:::1;;;;;;;;;;;:40;;;34206:10;34218:12;34165:66;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;34079:160:::0;:::o;1096:87::-;1142:7;1169:6;;;;;;;;;;;1162:13;;1096:87;:::o;29073:24::-;;;;;;;;;;;;;:::o;36139:95::-;982:13;:11;:13::i;:::-;36221:5:::1;36206:12;;:20;;;;;;;;;;;;;;;;;;36139:95:::0;:::o;6093:104::-;6149:13;6182:7;6175:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6093:104;:::o;36677:171::-;982:13;:11;:13::i;:::-;36796:44:::1;36825:7;36834:5;36796:28;:44::i;:::-;36677:171:::0;;:::o;35398:229::-;982:13;:11;:13::i;:::-;35505:2:::1;35491:10;:16;;35483:47;;;;;;;;;;;;:::i;:::-;;;;;;;;;35553:23;;;;;;;;35559:10;35553:23;;;;35571:4;35553:23;;::::0;35541:9:::1;:35;;;;;;;;;;;;;;;;;;;35615:4;35602:10;:17;;;;:::i;:::-;35587:12;:32;;;;35398:229:::0;;:::o;7641:436::-;7734:4;7751:13;7767:12;:10;:12::i;:::-;7751:28;;7790:24;7817:25;7827:5;7834:7;7817:9;:25::i;:::-;7790:52;;7881:15;7861:16;:35;;7853:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;7974:60;7983:5;7990:7;8018:15;7999:16;:34;7974:8;:60::i;:::-;8065:4;8058:11;;;;7641:436;;;;:::o;28859:19::-;;;;;;;;;;;;;:::o;37691:184::-;37788:7;37820:15;;;;;;;;;;;:38;;;37859:7;37820:47;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;37813:54;;37691:184;;;:::o;6557:193::-;6636:4;6653:13;6669:12;:10;:12::i;:::-;6653:28;;6692;6702:5;6709:2;6713:6;6692:9;:28::i;:::-;6738:4;6731:11;;;6557:193;;;;:::o;35158:232::-;982:13;:11;:13::i;:::-;35270:2:::1;35262:4;35249:10;:17;;;;:::i;:::-;:23;;35241:54;;;;;;;;;;;;:::i;:::-;;;;;;;;;35317:23;;;;;;;;35323:10;35317:23;;;;35335:4;35317:23;;::::0;35306:8:::1;:34;;;;;;;;;;;;;;;;;;;35378:4;35365:10;:17;;;;:::i;:::-;35351:11;:31;;;;35158:232:::0;;:::o;29491:38::-;;;;;;;;;;;;;;;;;;;;;;:::o;33149:119::-;982:13;:11;:13::i;:::-;33254:6:::1;33245;:15;;;;:::i;:::-;33224:18;:36;;;;33149:119:::0;:::o;29597:57::-;;;;;;;;;;;;;;;;;;;;;;:::o;42638:320::-;982:13;:11;:13::i;:::-;42719:12:::1;42741:4;;;;;;;;;;;42734:25;;;42774:10;42807:15;;;;;;;;;;;42838:6;42734:121;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;42719:136;;42870:7;42866:85;;;42894:15;;;;;;;;;;;:37;;;42932:6;42894:45;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;42866:85;42708:250;42638:320:::0;:::o;34487:327::-;982:13;:11;:13::i;:::-;34626:8:::1;34594:40;;:19;:28;34614:7;34594:28;;;;;;;;;;;;;;;;;;;;;;;;;:40;;::::0;34572:132:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;34746:8;34715:19;:28;34735:7;34715:28;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;34788:7;34772:34;;;34797:8;34772:34;;;;;;:::i;:::-;;;;;;;;34487:327:::0;;:::o;32605:185::-;982:13;:11;:13::i;:::-;32698:7:::1;32688:6;:17;;32680:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;32776:6;32767;:15;;;;:::i;:::-;32755:9;:27;;;;32605:185:::0;:::o;34247:113::-;982:13;:11;:13::i;:::-;34342:9:::1;34318:6;;:34;;;;;;;;;;;;;;;;;;34247:113:::0;:::o;33276:165::-;982:13;:11;:13::i;:::-;33425:8:::1;33389:24;:33;33414:7;33389:33;;;;;;;;;;;;;;;;:44;;;;;;;;;;;;;;;;;;33276:165:::0;;:::o;6758:151::-;6847:7;6874:11;:18;6886:5;6874:18;;;;;;;;;;;;;;;:27;6893:7;6874:27;;;;;;;;;;;;;;;;6867:34;;6758:151;;;;:::o;35773:99::-;982:13;:11;:13::i;:::-;35856:8:::1;35842:11;;:22;;;;;;;;;;;;;;;;;;35773:99:::0;:::o;29106:33::-;;;;:::o;1995:201::-;982:13;:11;:13::i;:::-;2104:1:::1;2084:22;;:8;:22;;::::0;2076:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;2160:28;2179:8;2160:18;:28::i;:::-;1995:201:::0;:::o;29369:36::-;;;;;;;;;;;;;;:::o;28824:28::-;;;;;;;;;;;;;:::o;29215:24::-;;;;:::o;1261:132::-;1336:12;:10;:12::i;:::-;1325:23;;:7;:5;:7::i;:::-;:23;;;1317:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1261:132::o;312:98::-;365:7;392:10;385:17;;312:98;:::o;10138:346::-;10257:1;10240:19;;:5;:19;;;10232:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;10338:1;10319:21;;:7;:21;;;10311:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;10422:6;10392:11;:18;10404:5;10392:18;;;;;;;;;;;;;;;:27;10411:7;10392:27;;;;;;;;;;;;;;;:36;;;;10460:7;10444:32;;10453:5;10444:32;;;10469:6;10444:32;;;;;;:::i;:::-;;;;;;;;10138:346;;;:::o;10492:419::-;10593:24;10620:25;10630:5;10637:7;10620:9;:25::i;:::-;10593:52;;10680:17;10660:16;:37;10656:248;;10742:6;10722:16;:26;;10714:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;10826:51;10835:5;10842:7;10870:6;10851:16;:25;10826:8;:51::i;:::-;10656:248;10582:329;10492:419;;;:::o;38440:2652::-;38588:1;38572:18;;:4;:18;;;38564:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;38665:1;38651:16;;:2;:16;;;38643:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;38739:19;:25;38759:4;38739:25;;;;;;;;;;;;;;;;;;;;;;;;;38738:26;:54;;;;;38769:19;:23;38789:2;38769:23;;;;;;;;;;;;;;;;;;;;;;;;;38768:24;38738:54;:67;;;;;38797:8;;;;;;;;;;;38796:9;38738:67;38720:788;;;38840:14;;;;;;;;;;;38832:45;;;;;;;;;;;;:::i;:::-;;;;;;;;;38896:25;:29;38922:2;38896:29;;;;;;;;;;;;;;;;;;;;;;;;;38892:384;;;38986:13;;38976:6;:23;;38946:128;;;;;;;;;;;;:::i;:::-;;;;;;;;;38892:384;;;39100:25;:31;39126:4;39100:31;;;;;;;;;;;;;;;;;;;;;;;;;39096:180;;;39190:12;;39180:6;:22;;39150:126;;;;;;;;;;;;:::i;:::-;;;;;;;;;39096:180;38892:384;39296:24;:28;39321:2;39296:28;;;;;;;;;;;;;;;;;;;;;;;;;39291:206;;39401:9;;39384:13;39394:2;39384:9;:13::i;:::-;39375:6;:22;;;;:::i;:::-;:35;;39345:136;;;;;;;;;;;;:::i;:::-;;;;;;;;;39291:206;38720:788;39534:1;39524:6;:11;39520:93;;39552:28;39568:4;39574:2;39578:1;39552:15;:28::i;:::-;39595:7;;39520:93;39625:28;39656:24;39674:4;39656:9;:24::i;:::-;39625:55;;39691:12;39730:18;;39706:20;:42;;39691:57;;39779:7;:33;;;;;39804:8;;;;;;;;;;;39803:9;39779:33;:61;;;;;39829:11;;;;;;;;;;;39779:61;:107;;;;;39857:25;:29;39883:2;39857:29;;;;;;;;;;;;;;;;;;;;;;;;;39779:107;:150;;;;;39904:19;:25;39924:4;39904:25;;;;;;;;;;;;;;;;;;;;;;;;;39903:26;39779:150;:191;;;;;39947:19;:23;39967:2;39947:23;;;;;;;;;;;;;;;;;;;;;;;;;39946:24;39779:191;39761:403;;;40008:4;39997:8;;:15;;;;;;;;;;;;;;;;;;40048:1;40033:12;;:16;40029:91;;;40070:34;40085:18;;40070:14;:34::i;:::-;40029:91;40147:5;40136:8;;:16;;;;;;;;;;;;;;;;;;39761:403;40176:12;40192:8;;;;;;;;;;;40191:9;40176:24;;40302:19;:25;40322:4;40302:25;;;;;;;;;;;;;;;;;;;;;;;;;:52;;;;40331:19;:23;40351:2;40331:23;;;;;;;;;;;;;;;;;;;;;;;;;40302:52;40298:100;;;40381:5;40371:15;;40298:100;40415:25;:29;40441:2;40415:29;;;;;;;;;;;;;;;;;;;;;;;;;40414:30;:66;;;;;40449:25;:31;40475:4;40449:31;;;;;;;;;;;;;;;;;;;;;;;;;40448:32;40414:66;40410:100;;;40505:5;40495:15;;40410:100;40527:7;40523:370;;;40551:14;40584:25;:29;40610:2;40584:29;;;;;;;;;;;;;;;;;;;;;;;;;40580:201;;;40667:3;40651:12;;40642:6;:21;;;;:::i;:::-;40641:29;;;;:::i;:::-;40632:38;;40580:201;;;40694:25;:31;40720:4;40694:31;;;;;;;;;;;;;;;;;;;;;;;;;40690:91;;;40778:3;40763:11;;40754:6;:20;;;;:::i;:::-;40753:28;;;;:::i;:::-;40744:37;;40690:91;40580:201;40816:6;40807;:15;;;;:::i;:::-;40798:24;;40837:44;40853:4;40867;40874:6;40837:15;:44::i;:::-;40536:357;40523:370;40903:33;40919:4;40925:2;40929:6;40903:15;:33::i;:::-;40953:15;;;;;;;;;;;:26;;;40980:4;40986:15;40996:4;40986:9;:15::i;:::-;40953:49;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40949:65;41028:15;;;;;;;;;;;:26;;;41055:2;41059:13;41069:2;41059:9;:13::i;:::-;41028:45;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41024:61;38553:2539;;;38440:2652;;;;:::o;2356:191::-;2430:16;2449:6;;;;;;;;;;;2430:25;;2475:8;2466:6;;:17;;;;;;;;;;;;;;;;;;2530:8;2499:40;;2520:8;2499:40;;;;;;;;;;;;2419:128;2356:191;:::o;36856:458::-;37002:5;36964:43;;:25;:34;36990:7;36964:34;;;;;;;;;;;;;;;;;;;;;;;;;:43;;;36942:149;;;;;;;;;;;;:::i;:::-;;;;;;;;;37139:5;37102:25;:34;37128:7;37102:34;;;;;;;;;;;;;;;;:42;;;;;;;;;;;;;;;;;;37161:5;37157:89;;;37183:15;;;;;;;;;;;:36;;;37220:7;37229:4;37183:51;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37157:89;37300:5;37263:43;;37291:7;37263:43;;;;;;;;;;;;36856:458;;:::o;8085:806::-;8198:1;8182:18;;:4;:18;;;8174:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;8275:1;8261:16;;:2;:16;;;8253:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;8330:38;8351:4;8357:2;8361:6;8330:20;:38::i;:::-;8381:19;8403:9;:15;8413:4;8403:15;;;;;;;;;;;;;;;;8381:37;;8452:6;8437:11;:21;;8429:72;;;;;;;;;;;;:::i;:::-;;;;;;;;;8569:6;8555:11;:20;8537:9;:15;8547:4;8537:15;;;;;;;;;;;;;;;:38;;;;8772:6;8755:9;:13;8765:2;8755:13;;;;;;;;;;;;;;;;:23;;;;;;;;;;;8822:2;8807:26;;8816:4;8807:26;;;8826:6;8807:26;;;;;;:::i;:::-;;;;;;;;8846:37;8866:4;8872:2;8876:6;8846:19;:37::i;:::-;8163:728;8085:806;;;:::o;41100:1412::-;41159:20;41232:1;41216:12;;41193:9;:19;;;41184:6;:28;;;;:::i;:::-;41183:45;;;;:::i;:::-;41182:51;;;;:::i;:::-;41159:74;;41244:32;41329:1;41313:12;;41290:9;:19;;;41281:6;:28;;;;:::i;:::-;41280:45;;;;:::i;:::-;41279:51;;;;:::i;:::-;41244:86;;41341:20;41391:12;;41374:9;:13;;;41365:6;:22;;;;:::i;:::-;41364:39;;;;:::i;:::-;41341:62;;41416:30;41433:12;41416:16;:30::i;:::-;41459:22;41484:21;41459:46;;41539:1;41522:14;:18;41518:142;;;41594:54;41607:24;41633:14;41594:12;:54::i;:::-;41518:142;41672:30;41689:12;41672:16;:30::i;:::-;41715:21;41739;41715:45;;41801:14;41818:13;41801:30;;41857:1;41848:6;:10;41844:171;;;41876:12;41902:9;;;;;;;;;;;41894:23;;41925:6;41894:42;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41875:61;;;41959:7;41951:52;;;;;;;;;;;;:::i;:::-;;;;;;;;;41860:155;41844:171;42027:17;42054:4;;;;;;;;;;;42047:22;;;42078:4;42047:37;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;42027:57;;42129:17;42149:9;42129:29;;42187:1;42175:9;:13;42171:334;;;42205:12;42227:4;;;;;;;;;;;42220:21;;;42268:15;;;;;;;;;;;42303:9;42220:107;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;42205:122;;42346:7;42342:152;;;42374:15;;;;;;;;;;;:37;;;42412:9;42374:48;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42446:32;42460:6;42468:9;42446:32;;;;;;;:::i;:::-;;;;;;;;42342:152;42190:315;42171:334;41148:1364;;;;;;;;41100:1412;:::o;10919:91::-;;;;:::o;11018:90::-;;;;:::o;42966:502::-;43032:21;43070:1;43056:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43032:40;;43101:4;43083;43088:1;43083:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;43127:6;;;;;;;;;;;:11;;;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;43117:4;43122:1;43117:7;;;;;;;;:::i;:::-;;;;;;;:23;;;;;;;;;;;43153:53;43170:4;43185:6;;;;;;;;;;;43194:11;43153:8;:53::i;:::-;43245:6;;;;;;;;;;;:57;;;43317:11;43343:1;43387:4;43414;43434:15;43245:215;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43021:447;42966:502;:::o;43476:501::-;43624:53;43641:4;43656:6;;;;;;;;;;;43665:11;43624:8;:53::i;:::-;43720:6;;;;;;;;;;;:22;;;43750:9;43783:4;43803:11;43829:1;43872;43923:4;43943:15;43720:249;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;43476:501;;:::o;88:117:1:-;197:1;194;187:12;334:126;371:7;411:42;404:5;400:54;389:65;;334:126;;;:::o;466:96::-;503:7;532:24;550:5;532:24;:::i;:::-;521:35;;466:96;;;:::o;568:122::-;641:24;659:5;641:24;:::i;:::-;634:5;631:35;621:63;;680:1;677;670:12;621:63;568:122;:::o;696:139::-;742:5;780:6;767:20;758:29;;796:33;823:5;796:33;:::i;:::-;696:139;;;;:::o;841:90::-;875:7;918:5;911:13;904:21;893:32;;841:90;;;:::o;937:116::-;1007:21;1022:5;1007:21;:::i;:::-;1000:5;997:32;987:60;;1043:1;1040;1033:12;987:60;937:116;:::o;1059:133::-;1102:5;1140:6;1127:20;1118:29;;1156:30;1180:5;1156:30;:::i;:::-;1059:133;;;;:::o;1198:468::-;1263:6;1271;1320:2;1308:9;1299:7;1295:23;1291:32;1288:119;;;1326:79;;:::i;:::-;1288:119;1446:1;1471:53;1516:7;1507:6;1496:9;1492:22;1471:53;:::i;:::-;1461:63;;1417:117;1573:2;1599:50;1641:7;1632:6;1621:9;1617:22;1599:50;:::i;:::-;1589:60;;1544:115;1198:468;;;;;:::o;1672:99::-;1724:6;1758:5;1752:12;1742:22;;1672:99;;;:::o;1777:169::-;1861:11;1895:6;1890:3;1883:19;1935:4;1930:3;1926:14;1911:29;;1777:169;;;;:::o;1952:246::-;2033:1;2043:113;2057:6;2054:1;2051:13;2043:113;;;2142:1;2137:3;2133:11;2127:18;2123:1;2118:3;2114:11;2107:39;2079:2;2076:1;2072:10;2067:15;;2043:113;;;2190:1;2181:6;2176:3;2172:16;2165:27;2014:184;1952:246;;;:::o;2204:102::-;2245:6;2296:2;2292:7;2287:2;2280:5;2276:14;2272:28;2262:38;;2204:102;;;:::o;2312:377::-;2400:3;2428:39;2461:5;2428:39;:::i;:::-;2483:71;2547:6;2542:3;2483:71;:::i;:::-;2476:78;;2563:65;2621:6;2616:3;2609:4;2602:5;2598:16;2563:65;:::i;:::-;2653:29;2675:6;2653:29;:::i;:::-;2648:3;2644:39;2637:46;;2404:285;2312:377;;;;:::o;2695:313::-;2808:4;2846:2;2835:9;2831:18;2823:26;;2895:9;2889:4;2885:20;2881:1;2870:9;2866:17;2859:47;2923:78;2996:4;2987:6;2923:78;:::i;:::-;2915:86;;2695:313;;;;:::o;3014:77::-;3051:7;3080:5;3069:16;;3014:77;;;:::o;3097:122::-;3170:24;3188:5;3170:24;:::i;:::-;3163:5;3160:35;3150:63;;3209:1;3206;3199:12;3150:63;3097:122;:::o;3225:139::-;3271:5;3309:6;3296:20;3287:29;;3325:33;3352:5;3325:33;:::i;:::-;3225:139;;;;:::o;3370:474::-;3438:6;3446;3495:2;3483:9;3474:7;3470:23;3466:32;3463:119;;;3501:79;;:::i;:::-;3463:119;3621:1;3646:53;3691:7;3682:6;3671:9;3667:22;3646:53;:::i;:::-;3636:63;;3592:117;3748:2;3774:53;3819:7;3810:6;3799:9;3795:22;3774:53;:::i;:::-;3764:63;;3719:118;3370:474;;;;;:::o;3850:109::-;3931:21;3946:5;3931:21;:::i;:::-;3926:3;3919:34;3850:109;;:::o;3965:210::-;4052:4;4090:2;4079:9;4075:18;4067:26;;4103:65;4165:1;4154:9;4150:17;4141:6;4103:65;:::i;:::-;3965:210;;;;:::o;4181:329::-;4240:6;4289:2;4277:9;4268:7;4264:23;4260:32;4257:119;;;4295:79;;:::i;:::-;4257:119;4415:1;4440:53;4485:7;4476:6;4465:9;4461:22;4440:53;:::i;:::-;4430:63;;4386:117;4181:329;;;;:::o;4516:118::-;4603:24;4621:5;4603:24;:::i;:::-;4598:3;4591:37;4516:118;;:::o;4640:222::-;4733:4;4771:2;4760:9;4756:18;4748:26;;4784:71;4852:1;4841:9;4837:17;4828:6;4784:71;:::i;:::-;4640:222;;;;:::o;4868:619::-;4945:6;4953;4961;5010:2;4998:9;4989:7;4985:23;4981:32;4978:119;;;5016:79;;:::i;:::-;4978:119;5136:1;5161:53;5206:7;5197:6;5186:9;5182:22;5161:53;:::i;:::-;5151:63;;5107:117;5263:2;5289:53;5334:7;5325:6;5314:9;5310:22;5289:53;:::i;:::-;5279:63;;5234:118;5391:2;5417:53;5462:7;5453:6;5442:9;5438:22;5417:53;:::i;:::-;5407:63;;5362:118;4868:619;;;;;:::o;5493:60::-;5521:3;5542:5;5535:12;;5493:60;;;:::o;5559:142::-;5609:9;5642:53;5660:34;5669:24;5687:5;5669:24;:::i;:::-;5660:34;:::i;:::-;5642:53;:::i;:::-;5629:66;;5559:142;;;:::o;5707:126::-;5757:9;5790:37;5821:5;5790:37;:::i;:::-;5777:50;;5707:126;;;:::o;5839:158::-;5921:9;5954:37;5985:5;5954:37;:::i;:::-;5941:50;;5839:158;;;:::o;6003:195::-;6122:69;6185:5;6122:69;:::i;:::-;6117:3;6110:82;6003:195;;:::o;6204:286::-;6329:4;6367:2;6356:9;6352:18;6344:26;;6380:103;6480:1;6469:9;6465:17;6456:6;6380:103;:::i;:::-;6204:286;;;;:::o;6496:86::-;6531:7;6571:4;6564:5;6560:16;6549:27;;6496:86;;;:::o;6588:112::-;6671:22;6687:5;6671:22;:::i;:::-;6666:3;6659:35;6588:112;;:::o;6706:214::-;6795:4;6833:2;6822:9;6818:18;6810:26;;6846:67;6910:1;6899:9;6895:17;6886:6;6846:67;:::i;:::-;6706:214;;;;:::o;6926:474::-;6994:6;7002;7051:2;7039:9;7030:7;7026:23;7022:32;7019:119;;;7057:79;;:::i;:::-;7019:119;7177:1;7202:53;7247:7;7238:6;7227:9;7223:22;7202:53;:::i;:::-;7192:63;;7148:117;7304:2;7330:53;7375:7;7366:6;7355:9;7351:22;7330:53;:::i;:::-;7320:63;;7275:118;6926:474;;;;;:::o;7406:118::-;7493:24;7511:5;7493:24;:::i;:::-;7488:3;7481:37;7406:118;;:::o;7530:664::-;7735:4;7773:3;7762:9;7758:19;7750:27;;7787:71;7855:1;7844:9;7840:17;7831:6;7787:71;:::i;:::-;7868:72;7936:2;7925:9;7921:18;7912:6;7868:72;:::i;:::-;7950;8018:2;8007:9;8003:18;7994:6;7950:72;:::i;:::-;8032;8100:2;8089:9;8085:18;8076:6;8032:72;:::i;:::-;8114:73;8182:3;8171:9;8167:19;8158:6;8114:73;:::i;:::-;7530:664;;;;;;;;:::o;8200:332::-;8321:4;8359:2;8348:9;8344:18;8336:26;;8372:71;8440:1;8429:9;8425:17;8416:6;8372:71;:::i;:::-;8453:72;8521:2;8510:9;8506:18;8497:6;8453:72;:::i;:::-;8200:332;;;;;:::o;8538:222::-;8631:4;8669:2;8658:9;8654:18;8646:26;;8682:71;8750:1;8739:9;8735:17;8726:6;8682:71;:::i;:::-;8538:222;;;;:::o;8766:323::-;8822:6;8871:2;8859:9;8850:7;8846:23;8842:32;8839:119;;;8877:79;;:::i;:::-;8839:119;8997:1;9022:50;9064:7;9055:6;9044:9;9040:22;9022:50;:::i;:::-;9012:60;;8968:114;8766:323;;;;:::o;9095:329::-;9154:6;9203:2;9191:9;9182:7;9178:23;9174:32;9171:119;;;9209:79;;:::i;:::-;9171:119;9329:1;9354:53;9399:7;9390:6;9379:9;9375:22;9354:53;:::i;:::-;9344:63;;9300:117;9095:329;;;;:::o;9430:474::-;9498:6;9506;9555:2;9543:9;9534:7;9530:23;9526:32;9523:119;;;9561:79;;:::i;:::-;9523:119;9681:1;9706:53;9751:7;9742:6;9731:9;9727:22;9706:53;:::i;:::-;9696:63;;9652:117;9808:2;9834:53;9879:7;9870:6;9859:9;9855:22;9834:53;:::i;:::-;9824:63;;9779:118;9430:474;;;;;:::o;9910:149::-;9983:9;10016:37;10047:5;10016:37;:::i;:::-;10003:50;;9910:149;;;:::o;10065:177::-;10175:60;10229:5;10175:60;:::i;:::-;10170:3;10163:73;10065:177;;:::o;10248:268::-;10364:4;10402:2;10391:9;10387:18;10379:26;;10415:94;10506:1;10495:9;10491:17;10482:6;10415:94;:::i;:::-;10248:268;;;;:::o;10522:320::-;10637:4;10675:2;10664:9;10660:18;10652:26;;10688:71;10756:1;10745:9;10741:17;10732:6;10688:71;:::i;:::-;10769:66;10831:2;10820:9;10816:18;10807:6;10769:66;:::i;:::-;10522:320;;;;;:::o;10848:180::-;10896:77;10893:1;10886:88;10993:4;10990:1;10983:15;11017:4;11014:1;11007:15;11034:320;11078:6;11115:1;11109:4;11105:12;11095:22;;11162:1;11156:4;11152:12;11183:18;11173:81;;11239:4;11231:6;11227:17;11217:27;;11173:81;11301:2;11293:6;11290:14;11270:18;11267:38;11264:84;;11320:18;;:::i;:::-;11264:84;11085:269;11034:320;;;:::o;11360:143::-;11417:5;11448:6;11442:13;11433:22;;11464:33;11491:5;11464:33;:::i;:::-;11360:143;;;;:::o;11509:351::-;11579:6;11628:2;11616:9;11607:7;11603:23;11599:32;11596:119;;;11634:79;;:::i;:::-;11596:119;11754:1;11779:64;11835:7;11826:6;11815:9;11811:22;11779:64;:::i;:::-;11769:74;;11725:128;11509:351;;;;:::o;11866:332::-;11987:4;12025:2;12014:9;12010:18;12002:26;;12038:71;12106:1;12095:9;12091:17;12082:6;12038:71;:::i;:::-;12119:72;12187:2;12176:9;12172:18;12163:6;12119:72;:::i;:::-;11866:332;;;;;:::o;12204:137::-;12258:5;12289:6;12283:13;12274:22;;12305:30;12329:5;12305:30;:::i;:::-;12204:137;;;;:::o;12347:345::-;12414:6;12463:2;12451:9;12442:7;12438:23;12434:32;12431:119;;;12469:79;;:::i;:::-;12431:119;12589:1;12614:61;12667:7;12658:6;12647:9;12643:22;12614:61;:::i;:::-;12604:71;;12560:125;12347:345;;;;:::o;12698:173::-;12838:25;12834:1;12826:6;12822:14;12815:49;12698:173;:::o;12877:366::-;13019:3;13040:67;13104:2;13099:3;13040:67;:::i;:::-;13033:74;;13116:93;13205:3;13116:93;:::i;:::-;13234:2;13229:3;13225:12;13218:19;;12877:366;;;:::o;13249:419::-;13415:4;13453:2;13442:9;13438:18;13430:26;;13502:9;13496:4;13492:20;13488:1;13477:9;13473:17;13466:47;13530:131;13656:4;13530:131;:::i;:::-;13522:139;;13249:419;;;:::o;13674:147::-;13775:11;13812:3;13797:18;;13674:147;;;;:::o;13827:114::-;;:::o;13947:398::-;14106:3;14127:83;14208:1;14203:3;14127:83;:::i;:::-;14120:90;;14219:93;14308:3;14219:93;:::i;:::-;14337:1;14332:3;14328:11;14321:18;;13947:398;;;:::o;14351:379::-;14535:3;14557:147;14700:3;14557:147;:::i;:::-;14550:154;;14721:3;14714:10;;14351:379;;;:::o;14736:180::-;14784:77;14781:1;14774:88;14881:4;14878:1;14871:15;14905:4;14902:1;14895:15;14922:191;14962:3;14981:20;14999:1;14981:20;:::i;:::-;14976:25;;15015:20;15033:1;15015:20;:::i;:::-;15010:25;;15058:1;15055;15051:9;15044:16;;15079:3;15076:1;15073:10;15070:36;;;15086:18;;:::i;:::-;15070:36;14922:191;;;;:::o;15119:167::-;15259:19;15255:1;15247:6;15243:14;15236:43;15119:167;:::o;15292:366::-;15434:3;15455:67;15519:2;15514:3;15455:67;:::i;:::-;15448:74;;15531:93;15620:3;15531:93;:::i;:::-;15649:2;15644:3;15640:12;15633:19;;15292:366;;;:::o;15664:419::-;15830:4;15868:2;15857:9;15853:18;15845:26;;15917:9;15911:4;15907:20;15903:1;15892:9;15888:17;15881:47;15945:131;16071:4;15945:131;:::i;:::-;15937:139;;15664:419;;;:::o;16089:104::-;16134:7;16163:24;16181:5;16163:24;:::i;:::-;16152:35;;16089:104;;;:::o;16199:142::-;16302:32;16328:5;16302:32;:::i;:::-;16297:3;16290:45;16199:142;;:::o;16347:254::-;16456:4;16494:2;16483:9;16479:18;16471:26;;16507:87;16591:1;16580:9;16576:17;16567:6;16507:87;:::i;:::-;16347:254;;;;:::o;16607:222::-;16747:34;16743:1;16735:6;16731:14;16724:58;16816:5;16811:2;16803:6;16799:15;16792:30;16607:222;:::o;16835:366::-;16977:3;16998:67;17062:2;17057:3;16998:67;:::i;:::-;16991:74;;17074:93;17163:3;17074:93;:::i;:::-;17192:2;17187:3;17183:12;17176:19;;16835:366;;;:::o;17207:419::-;17373:4;17411:2;17400:9;17396:18;17388:26;;17460:9;17454:4;17450:20;17446:1;17435:9;17431:17;17424:47;17488:131;17614:4;17488:131;:::i;:::-;17480:139;;17207:419;;;:::o;17632:223::-;17772:34;17768:1;17760:6;17756:14;17749:58;17841:6;17836:2;17828:6;17824:15;17817:31;17632:223;:::o;17861:366::-;18003:3;18024:67;18088:2;18083:3;18024:67;:::i;:::-;18017:74;;18100:93;18189:3;18100:93;:::i;:::-;18218:2;18213:3;18209:12;18202:19;;17861:366;;;:::o;18233:419::-;18399:4;18437:2;18426:9;18422:18;18414:26;;18486:9;18480:4;18476:20;18472:1;18461:9;18457:17;18450:47;18514:131;18640:4;18514:131;:::i;:::-;18506:139;;18233:419;;;:::o;18658:410::-;18698:7;18721:20;18739:1;18721:20;:::i;:::-;18716:25;;18755:20;18773:1;18755:20;:::i;:::-;18750:25;;18810:1;18807;18803:9;18832:30;18850:11;18832:30;:::i;:::-;18821:41;;19011:1;19002:7;18998:15;18995:1;18992:22;18972:1;18965:9;18945:83;18922:139;;19041:18;;:::i;:::-;18922:139;18706:362;18658:410;;;;:::o;19074:143::-;19131:5;19162:6;19156:13;19147:22;;19178:33;19205:5;19178:33;:::i;:::-;19074:143;;;;:::o;19223:977::-;19329:6;19337;19345;19353;19361;19410:3;19398:9;19389:7;19385:23;19381:33;19378:120;;;19417:79;;:::i;:::-;19378:120;19537:1;19562:64;19618:7;19609:6;19598:9;19594:22;19562:64;:::i;:::-;19552:74;;19508:128;19675:2;19701:64;19757:7;19748:6;19737:9;19733:22;19701:64;:::i;:::-;19691:74;;19646:129;19814:2;19840:64;19896:7;19887:6;19876:9;19872:22;19840:64;:::i;:::-;19830:74;;19785:129;19953:2;19979:64;20035:7;20026:6;20015:9;20011:22;19979:64;:::i;:::-;19969:74;;19924:129;20092:3;20119:64;20175:7;20166:6;20155:9;20151:22;20119:64;:::i;:::-;20109:74;;20063:130;19223:977;;;;;;;;:::o;20206:332::-;20327:4;20365:2;20354:9;20350:18;20342:26;;20378:71;20446:1;20435:9;20431:17;20422:6;20378:71;:::i;:::-;20459:72;20527:2;20516:9;20512:18;20503:6;20459:72;:::i;:::-;20206:332;;;;;:::o;20544:168::-;20684:20;20680:1;20672:6;20668:14;20661:44;20544:168;:::o;20718:366::-;20860:3;20881:67;20945:2;20940:3;20881:67;:::i;:::-;20874:74;;20957:93;21046:3;20957:93;:::i;:::-;21075:2;21070:3;21066:12;21059:19;;20718:366;;;:::o;21090:419::-;21256:4;21294:2;21283:9;21279:18;21271:26;;21343:9;21337:4;21333:20;21329:1;21318:9;21314:17;21307:47;21371:131;21497:4;21371:131;:::i;:::-;21363:139;;21090:419;;;:::o;21515:224::-;21655:34;21651:1;21643:6;21639:14;21632:58;21724:7;21719:2;21711:6;21707:15;21700:32;21515:224;:::o;21745:366::-;21887:3;21908:67;21972:2;21967:3;21908:67;:::i;:::-;21901:74;;21984:93;22073:3;21984:93;:::i;:::-;22102:2;22097:3;22093:12;22086:19;;21745:366;;;:::o;22117:419::-;22283:4;22321:2;22310:9;22306:18;22298:26;;22370:9;22364:4;22360:20;22356:1;22345:9;22341:17;22334:47;22398:131;22524:4;22398:131;:::i;:::-;22390:139;;22117:419;;;:::o;22542:442::-;22691:4;22729:2;22718:9;22714:18;22706:26;;22742:71;22810:1;22799:9;22795:17;22786:6;22742:71;:::i;:::-;22823:72;22891:2;22880:9;22876:18;22867:6;22823:72;:::i;:::-;22905;22973:2;22962:9;22958:18;22949:6;22905:72;:::i;:::-;22542:442;;;;;;:::o;22990:229::-;23130:34;23126:1;23118:6;23114:14;23107:58;23199:12;23194:2;23186:6;23182:15;23175:37;22990:229;:::o;23225:366::-;23367:3;23388:67;23452:2;23447:3;23388:67;:::i;:::-;23381:74;;23464:93;23553:3;23464:93;:::i;:::-;23582:2;23577:3;23573:12;23566:19;;23225:366;;;:::o;23597:419::-;23763:4;23801:2;23790:9;23786:18;23778:26;;23850:9;23844:4;23840:20;23836:1;23825:9;23821:17;23814:47;23878:131;24004:4;23878:131;:::i;:::-;23870:139;;23597:419;;;:::o;24022:221::-;24162:34;24158:1;24150:6;24146:14;24139:58;24231:4;24226:2;24218:6;24214:15;24207:29;24022:221;:::o;24249:366::-;24391:3;24412:67;24476:2;24471:3;24412:67;:::i;:::-;24405:74;;24488:93;24577:3;24488:93;:::i;:::-;24606:2;24601:3;24597:12;24590:19;;24249:366;;;:::o;24621:419::-;24787:4;24825:2;24814:9;24810:18;24802:26;;24874:9;24868:4;24864:20;24860:1;24849:9;24845:17;24838:47;24902:131;25028:4;24902:131;:::i;:::-;24894:139;;24621:419;;;:::o;25046:225::-;25186:34;25182:1;25174:6;25170:14;25163:58;25255:8;25250:2;25242:6;25238:15;25231:33;25046:225;:::o;25277:366::-;25419:3;25440:67;25504:2;25499:3;25440:67;:::i;:::-;25433:74;;25516:93;25605:3;25516:93;:::i;:::-;25634:2;25629:3;25625:12;25618:19;;25277:366;;;:::o;25649:419::-;25815:4;25853:2;25842:9;25838:18;25830:26;;25902:9;25896:4;25892:20;25888:1;25877:9;25873:17;25866:47;25930:131;26056:4;25930:131;:::i;:::-;25922:139;;25649:419;;;:::o;26074:182::-;26214:34;26210:1;26202:6;26198:14;26191:58;26074:182;:::o;26262:366::-;26404:3;26425:67;26489:2;26484:3;26425:67;:::i;:::-;26418:74;;26501:93;26590:3;26501:93;:::i;:::-;26619:2;26614:3;26610:12;26603:19;;26262:366;;;:::o;26634:419::-;26800:4;26838:2;26827:9;26823:18;26815:26;;26887:9;26881:4;26877:20;26873:1;26862:9;26858:17;26851:47;26915:131;27041:4;26915:131;:::i;:::-;26907:139;;26634:419;;;:::o;27059:223::-;27199:34;27195:1;27187:6;27183:14;27176:58;27268:6;27263:2;27255:6;27251:15;27244:31;27059:223;:::o;27288:366::-;27430:3;27451:67;27515:2;27510:3;27451:67;:::i;:::-;27444:74;;27527:93;27616:3;27527:93;:::i;:::-;27645:2;27640:3;27636:12;27629:19;;27288:366;;;:::o;27660:419::-;27826:4;27864:2;27853:9;27849:18;27841:26;;27913:9;27907:4;27903:20;27899:1;27888:9;27884:17;27877:47;27941:131;28067:4;27941:131;:::i;:::-;27933:139;;27660:419;;;:::o;28085:221::-;28225:34;28221:1;28213:6;28209:14;28202:58;28294:4;28289:2;28281:6;28277:15;28270:29;28085:221;:::o;28312:366::-;28454:3;28475:67;28539:2;28534:3;28475:67;:::i;:::-;28468:74;;28551:93;28640:3;28551:93;:::i;:::-;28669:2;28664:3;28660:12;28653:19;;28312:366;;;:::o;28684:419::-;28850:4;28888:2;28877:9;28873:18;28865:26;;28937:9;28931:4;28927:20;28923:1;28912:9;28908:17;28901:47;28965:131;29091:4;28965:131;:::i;:::-;28957:139;;28684:419;;;:::o;29109:179::-;29249:31;29245:1;29237:6;29233:14;29226:55;29109:179;:::o;29294:366::-;29436:3;29457:67;29521:2;29516:3;29457:67;:::i;:::-;29450:74;;29533:93;29622:3;29533:93;:::i;:::-;29651:2;29646:3;29642:12;29635:19;;29294:366;;;:::o;29666:419::-;29832:4;29870:2;29859:9;29855:18;29847:26;;29919:9;29913:4;29909:20;29905:1;29894:9;29890:17;29883:47;29947:131;30073:4;29947:131;:::i;:::-;29939:139;;29666:419;;;:::o;30091:224::-;30231:34;30227:1;30219:6;30215:14;30208:58;30300:7;30295:2;30287:6;30283:15;30276:32;30091:224;:::o;30321:366::-;30463:3;30484:67;30548:2;30543:3;30484:67;:::i;:::-;30477:74;;30560:93;30649:3;30560:93;:::i;:::-;30678:2;30673:3;30669:12;30662:19;;30321:366;;;:::o;30693:419::-;30859:4;30897:2;30886:9;30882:18;30874:26;;30946:9;30940:4;30936:20;30932:1;30921:9;30917:17;30910:47;30974:131;31100:4;30974:131;:::i;:::-;30966:139;;30693:419;;;:::o;31118:222::-;31258:34;31254:1;31246:6;31242:14;31235:58;31327:5;31322:2;31314:6;31310:15;31303:30;31118:222;:::o;31346:366::-;31488:3;31509:67;31573:2;31568:3;31509:67;:::i;:::-;31502:74;;31585:93;31674:3;31585:93;:::i;:::-;31703:2;31698:3;31694:12;31687:19;;31346:366;;;:::o;31718:419::-;31884:4;31922:2;31911:9;31907:18;31899:26;;31971:9;31965:4;31961:20;31957:1;31946:9;31942:17;31935:47;31999:131;32125:4;31999:131;:::i;:::-;31991:139;;31718:419;;;:::o;32143:168::-;32283:20;32279:1;32271:6;32267:14;32260:44;32143:168;:::o;32317:366::-;32459:3;32480:67;32544:2;32539:3;32480:67;:::i;:::-;32473:74;;32556:93;32645:3;32556:93;:::i;:::-;32674:2;32669:3;32665:12;32658:19;;32317:366;;;:::o;32689:419::-;32855:4;32893:2;32882:9;32878:18;32870:26;;32942:9;32936:4;32932:20;32928:1;32917:9;32913:17;32906:47;32970:131;33096:4;32970:131;:::i;:::-;32962:139;;32689:419;;;:::o;33114:181::-;33254:33;33250:1;33242:6;33238:14;33231:57;33114:181;:::o;33301:366::-;33443:3;33464:67;33528:2;33523:3;33464:67;:::i;:::-;33457:74;;33540:93;33629:3;33540:93;:::i;:::-;33658:2;33653:3;33649:12;33642:19;;33301:366;;;:::o;33673:419::-;33839:4;33877:2;33866:9;33862:18;33854:26;;33926:9;33920:4;33916:20;33912:1;33901:9;33897:17;33890:47;33954:131;34080:4;33954:131;:::i;:::-;33946:139;;33673:419;;;:::o;34098:180::-;34238:32;34234:1;34226:6;34222:14;34215:56;34098:180;:::o;34284:366::-;34426:3;34447:67;34511:2;34506:3;34447:67;:::i;:::-;34440:74;;34523:93;34612:3;34523:93;:::i;:::-;34641:2;34636:3;34632:12;34625:19;;34284:366;;;:::o;34656:419::-;34822:4;34860:2;34849:9;34845:18;34837:26;;34909:9;34903:4;34899:20;34895:1;34884:9;34880:17;34873:47;34937:131;35063:4;34937:131;:::i;:::-;34929:139;;34656:419;;;:::o;35081:177::-;35221:29;35217:1;35209:6;35205:14;35198:53;35081:177;:::o;35264:366::-;35406:3;35427:67;35491:2;35486:3;35427:67;:::i;:::-;35420:74;;35503:93;35592:3;35503:93;:::i;:::-;35621:2;35616:3;35612:12;35605:19;;35264:366;;;:::o;35636:419::-;35802:4;35840:2;35829:9;35825:18;35817:26;;35889:9;35883:4;35879:20;35875:1;35864:9;35860:17;35853:47;35917:131;36043:4;35917:131;:::i;:::-;35909:139;;35636:419;;;:::o;36061:180::-;36109:77;36106:1;36099:88;36206:4;36203:1;36196:15;36230:4;36227:1;36220:15;36247:185;36287:1;36304:20;36322:1;36304:20;:::i;:::-;36299:25;;36338:20;36356:1;36338:20;:::i;:::-;36333:25;;36377:1;36367:35;;36382:18;;:::i;:::-;36367:35;36424:1;36421;36417:9;36412:14;;36247:185;;;;:::o;36438:194::-;36478:4;36498:20;36516:1;36498:20;:::i;:::-;36493:25;;36532:20;36550:1;36532:20;:::i;:::-;36527:25;;36576:1;36573;36569:9;36561:17;;36600:1;36594:4;36591:11;36588:37;;;36605:18;;:::i;:::-;36588:37;36438:194;;;;:::o;36638:243::-;36778:34;36774:1;36766:6;36762:14;36755:58;36847:26;36842:2;36834:6;36830:15;36823:51;36638:243;:::o;36887:366::-;37029:3;37050:67;37114:2;37109:3;37050:67;:::i;:::-;37043:74;;37126:93;37215:3;37126:93;:::i;:::-;37244:2;37239:3;37235:12;37228:19;;36887:366;;;:::o;37259:419::-;37425:4;37463:2;37452:9;37448:18;37440:26;;37512:9;37506:4;37502:20;37498:1;37487:9;37483:17;37476:47;37540:131;37666:4;37540:131;:::i;:::-;37532:139;;37259:419;;;:::o;37684:225::-;37824:34;37820:1;37812:6;37808:14;37801:58;37893:8;37888:2;37880:6;37876:15;37869:33;37684:225;:::o;37915:366::-;38057:3;38078:67;38142:2;38137:3;38078:67;:::i;:::-;38071:74;;38154:93;38243:3;38154:93;:::i;:::-;38272:2;38267:3;38263:12;38256:19;;37915:366;;;:::o;38287:419::-;38453:4;38491:2;38480:9;38476:18;38468:26;;38540:9;38534:4;38530:20;38526:1;38515:9;38511:17;38504:47;38568:131;38694:4;38568:131;:::i;:::-;38560:139;;38287:419;;;:::o;38712:182::-;38852:34;38848:1;38840:6;38836:14;38829:58;38712:182;:::o;38900:366::-;39042:3;39063:67;39127:2;39122:3;39063:67;:::i;:::-;39056:74;;39139:93;39228:3;39139:93;:::i;:::-;39257:2;39252:3;39248:12;39241:19;;38900:366;;;:::o;39272:419::-;39438:4;39476:2;39465:9;39461:18;39453:26;;39525:9;39519:4;39515:20;39511:1;39500:9;39496:17;39489:47;39553:131;39679:4;39553:131;:::i;:::-;39545:139;;39272:419;;;:::o;39697:180::-;39745:77;39742:1;39735:88;39842:4;39839:1;39832:15;39866:4;39863:1;39856:15;39883:180;39931:77;39928:1;39921:88;40028:4;40025:1;40018:15;40052:4;40049:1;40042:15;40069:351;40139:6;40188:2;40176:9;40167:7;40163:23;40159:32;40156:119;;;40194:79;;:::i;:::-;40156:119;40314:1;40339:64;40395:7;40386:6;40375:9;40371:22;40339:64;:::i;:::-;40329:74;;40285:128;40069:351;;;;:::o;40426:85::-;40471:7;40500:5;40489:16;;40426:85;;;:::o;40517:158::-;40575:9;40608:61;40626:42;40635:32;40661:5;40635:32;:::i;:::-;40626:42;:::i;:::-;40608:61;:::i;:::-;40595:74;;40517:158;;;:::o;40681:147::-;40776:45;40815:5;40776:45;:::i;:::-;40771:3;40764:58;40681:147;;:::o;40834:114::-;40901:6;40935:5;40929:12;40919:22;;40834:114;;;:::o;40954:184::-;41053:11;41087:6;41082:3;41075:19;41127:4;41122:3;41118:14;41103:29;;40954:184;;;;:::o;41144:132::-;41211:4;41234:3;41226:11;;41264:4;41259:3;41255:14;41247:22;;41144:132;;;:::o;41282:108::-;41359:24;41377:5;41359:24;:::i;:::-;41354:3;41347:37;41282:108;;:::o;41396:179::-;41465:10;41486:46;41528:3;41520:6;41486:46;:::i;:::-;41564:4;41559:3;41555:14;41541:28;;41396:179;;;;:::o;41581:113::-;41651:4;41683;41678:3;41674:14;41666:22;;41581:113;;;:::o;41730:732::-;41849:3;41878:54;41926:5;41878:54;:::i;:::-;41948:86;42027:6;42022:3;41948:86;:::i;:::-;41941:93;;42058:56;42108:5;42058:56;:::i;:::-;42137:7;42168:1;42153:284;42178:6;42175:1;42172:13;42153:284;;;42254:6;42248:13;42281:63;42340:3;42325:13;42281:63;:::i;:::-;42274:70;;42367:60;42420:6;42367:60;:::i;:::-;42357:70;;42213:224;42200:1;42197;42193:9;42188:14;;42153:284;;;42157:14;42453:3;42446:10;;41854:608;;;41730:732;;;;:::o;42468:831::-;42731:4;42769:3;42758:9;42754:19;42746:27;;42783:71;42851:1;42840:9;42836:17;42827:6;42783:71;:::i;:::-;42864:80;42940:2;42929:9;42925:18;42916:6;42864:80;:::i;:::-;42991:9;42985:4;42981:20;42976:2;42965:9;42961:18;42954:48;43019:108;43122:4;43113:6;43019:108;:::i;:::-;43011:116;;43137:72;43205:2;43194:9;43190:18;43181:6;43137:72;:::i;:::-;43219:73;43287:3;43276:9;43272:19;43263:6;43219:73;:::i;:::-;42468:831;;;;;;;;:::o;43305:807::-;43554:4;43592:3;43581:9;43577:19;43569:27;;43606:71;43674:1;43663:9;43659:17;43650:6;43606:71;:::i;:::-;43687:72;43755:2;43744:9;43740:18;43731:6;43687:72;:::i;:::-;43769:80;43845:2;43834:9;43830:18;43821:6;43769:80;:::i;:::-;43859;43935:2;43924:9;43920:18;43911:6;43859:80;:::i;:::-;43949:73;44017:3;44006:9;44002:19;43993:6;43949:73;:::i;:::-;44032;44100:3;44089:9;44085:19;44076:6;44032:73;:::i;:::-;43305:807;;;;;;;;;:::o;44118:663::-;44206:6;44214;44222;44271:2;44259:9;44250:7;44246:23;44242:32;44239:119;;;44277:79;;:::i;:::-;44239:119;44397:1;44422:64;44478:7;44469:6;44458:9;44454:22;44422:64;:::i;:::-;44412:74;;44368:128;44535:2;44561:64;44617:7;44608:6;44597:9;44593:22;44561:64;:::i;:::-;44551:74;;44506:129;44674:2;44700:64;44756:7;44747:6;44736:9;44732:22;44700:64;:::i;:::-;44690:74;;44645:129;44118:663;;;;;:::o

Swarm Source

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