Contract 0x3c537d1f7c9ab3fb3c9ebcb76e9105878494c07d

Contract Overview

Balance:
0 BNB
Txn Hash Method
Block
From
To
Value [Txn Fee]
0x0eb51b6909215f6b7098e621a61de7a7d4c1057bccfa60463bd29f00f984040f0x60806040107526342021-07-20 9:24:27133 days 11 hrs ago0x58dfdfaa2747e746d1c4cee3b83bb5428dce7fcc IN  Contract Creation0 BNB0.04395632
[ Download CSV Export 
Parent Txn Hash Block From To Value
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
Hodls1

Compiler Version
v0.8.5+commit.a4f2e591

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at BscScan.com on 2021-07-20
*/

/**
 *Submitted for verification at BscScan.com on 2021-07-20
 */

// Hodls.finance Platform Token BEP20
//
// Web: https://hodls.money/
// Telegram announcement channel: https://t.me/sct_notice
// SPDX-License-Identifier: MIT

pragma solidity ^0.8.5;
pragma experimental ABIEncoderV2;

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

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

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

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

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

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

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

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

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

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

/**
 * @dev Wrappers over Solidity's arithmetic operations with added overflow
 * checks.
 *
 * Arithmetic operations in Solidity wrap on overflow. This can easily result
 * in bugs, because programmers usually assume that an overflow raises an
 * error, which is the standard behavior in high level programming languages.
 * `SafeMath` restores this intuition by reverting the transaction when an
 * operation overflows.
 *
 * Using this library instead of the unchecked operations eliminates an entire
 * class of bugs, so it's recommended to use it always.
 */
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;
  }
}

/**
 * @dev Collection of functions related to the address type
 */
library Address {
  /**
   * @dev Returns true if `account` is a contract.
   *
   * [IMPORTANT]
   * ====
   * It is unsafe to assume that an address for which this function returns
   * false is an externally-owned account (EOA) and not a contract.
   *
   * Among others, `isContract` will return false for the following
   * types of addresses:
   *
   *  - an externally-owned account
   *  - a contract in construction
   *  - an address where a contract will be created
   *  - an address where a contract lived, but was destroyed
   * ====
   */
  function isContract(address account) internal view returns (bool) {
    // According to EIP-1052, 0x0 is the value returned for not-yet created accounts
    // and 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470 is returned
    // for accounts without code, i.e. `keccak256('')`
    bytes32 codehash;


      bytes32 accountHash
     = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470;
    // solhint-disable-next-line no-inline-assembly
    assembly {
      codehash := extcodehash(account)
    }
    return (codehash != accountHash && codehash != 0x0);
  }

  /**
   * @dev Replacement for Solidity's `transfer`: sends `amount` wei to
   * `recipient`, forwarding all available gas and reverting on errors.
   *
   * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost
   * of certain opcodes, possibly making contracts go over the 2300 gas limit
   * imposed by `transfer`, making them unable to receive funds via
   * `transfer`. {sendValue} removes this limitation.
   *
   * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].
   *
   * IMPORTANT: because control is transferred to `recipient`, care must be
   * taken to not create reentrancy vulnerabilities. Consider using
   * {ReentrancyGuard} or the
   * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].
   */
  function sendValue(address payable recipient, uint256 amount) internal {
    require(address(this).balance >= amount, "Address: insufficient balance");

    // solhint-disable-next-line avoid-low-level-calls, avoid-call-value
    (bool success, ) = recipient.call{ value: amount }("");
    require(
      success,
      "Address: unable to send value, recipient may have reverted"
    );
  }

  /**
   * @dev Performs a Solidity function call using a low level `call`. A
   * plain`call` is an unsafe replacement for a function call: use this
   * function instead.
   *
   * If `target` reverts with a revert reason, it is bubbled up by this
   * function (like regular Solidity function calls).
   *
   * Returns the raw returned data. To convert to the expected return value,
   * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].
   *
   * Requirements:
   *
   * - `target` must be a contract.
   * - calling `target` with `data` must not revert.
   *
   * _Available since v3.1._
   */
  function functionCall(address target, bytes memory data)
    internal
    returns (bytes memory)
  {
    return functionCall(target, data, "Address: low-level call failed");
  }

  /**
   * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with
   * `errorMessage` as a fallback revert reason when `target` reverts.
   *
   * _Available since v3.1._
   */
  function functionCall(
    address target,
    bytes memory data,
    string memory errorMessage
  ) internal returns (bytes memory) {
    return _functionCallWithValue(target, data, 0, errorMessage);
  }

  /**
   * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
   * but also transferring `value` wei to `target`.
   *
   * Requirements:
   *
   * - the calling contract must have an ETH balance of at least `value`.
   * - the called Solidity function must be `payable`.
   *
   * _Available since v3.1._
   */
  function functionCallWithValue(
    address target,
    bytes memory data,
    uint256 value
  ) internal returns (bytes memory) {
    return
      functionCallWithValue(
        target,
        data,
        value,
        "Address: low-level call with value failed"
      );
  }

  /**
   * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but
   * with `errorMessage` as a fallback revert reason when `target` reverts.
   *
   * _Available since v3.1._
   */
  function functionCallWithValue(
    address target,
    bytes memory data,
    uint256 value,
    string memory errorMessage
  ) internal returns (bytes memory) {
    require(
      address(this).balance >= value,
      "Address: insufficient balance for call"
    );
    return _functionCallWithValue(target, data, value, errorMessage);
  }

  function _functionCallWithValue(
    address target,
    bytes memory data,
    uint256 weiValue,
    string memory errorMessage
  ) private returns (bytes memory) {
    require(isContract(target), "Address: call to non-contract");

    // solhint-disable-next-line avoid-low-level-calls
    (bool success, bytes memory returndata) = target.call{ value: weiValue }(
      data
    );
    if (success) {
      return returndata;
    } else {
      // Look for revert reason and bubble it up if present
      if (returndata.length > 0) {
        // The easiest way to bubble the revert reason is using memory via assembly

        // solhint-disable-next-line no-inline-assembly
        assembly {
          let returndata_size := mload(returndata)
          revert(add(32, returndata), returndata_size)
        }
      } else {
        revert(errorMessage);
      }
    }
  }
}

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

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

  /**
   * @dev Initializes the contract setting the deployer as the initial owner.
   */
  constructor() {
    address msgSender = _msgSender();
    _owner = msgSender;
    emit OwnershipTransferred(address(0), msgSender);
  }

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

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

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

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

/**
 * @dev Hodls.money
 * Max Supply : 3500 HODL
 * Fee Rate : 4.4%
 * Burn Rate : 4.4%
 * Team Fee : 1.2%
 */
contract Hodls1 is Context, IBEP20, Ownable {
  using SafeMath for uint256;
  using Address for address;

  mapping(address => uint256) private _rOwned; // 현재 코인 보유수량
  mapping(address => uint256) private _tOwned; // excluded 된 account가 가진 보유수량
  mapping(address => mapping(address => uint256)) private _allowances; // Transfer Allowance

  mapping(address => bool) private _isExcluded; // Fee 분배 제외 계정 여부
  address[] private _excluded; // Fee 분배 `제외 계정 Array

  string private constant _NAME = "HODLS";
  string private constant _SYMBOL = "HODL";
  uint8 private constant _DECIMALS = 8;

  uint256 private constant _MAX = ~uint256(0); // 숫자로 나타낼 수 있는 최대 수(Max 값)
  uint256 private constant _DECIMALFACTOR = 10**uint256(_DECIMALS); // Decimal Factor
  uint256 private constant _GRANULARITY = 100;

  // Total Amount
  uint256 private _tTotal = 3500 * _DECIMALFACTOR;
  // _MAX에서 _tTotal 나머지를 뺀수(아주 큰수)
  // 아주 큰 수에서 _tTotal 나머지를 뺀 수는 항상 _tTotal 값으로 나누어 짐.. 그렇기 떄문에 이렇게 계산을 한다.
  uint256 private _rTotal = (_MAX - (_MAX % _tTotal));

  uint256 private _tFeeTotal; // Total Fee Amount
  uint256 private _tBurnTotal; // Total Burn Amount

  // Fee 총합은 1000(10%)
  uint256 private constant _TAX_FEE = 440;
  uint256 private constant _BURN_FEE = 440;
  uint256 private constant _TEAM_FEE = 120;

  uint256 private constant _MAX_TX_SIZE = 3500 * _DECIMALFACTOR;

  // address private _owner;    // ownable.sol에 정의
  address private _teamAddress = 0x9a1789bDCbB549FcC19EE559921De904f09c6132;
  address private _ROUTER_ADDRESS = 0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D;

  uint256 private _startBlock; // 시작블럭번호
  uint256 private _unlockBlock; // 락업 해제 블럭 번호
  uint256 private _oneYearBlocks = 10512000; // 365 days

  mapping(address => bool) private _isLocked; // Lockup 계정 여부
  address[] private _lockupList; // Lockup 대상 Addresses 이 계정들은 1년 이내에 전송 불가

  bool private _isAppliedFee = false; // Fee On/Off
  bool private _isAppliedBurn = false; // Burn On/Off
  bool private _isAppliedTeamFee = false; // Team Fee On/Off

  /**
   * @dev Hodls.money
   * Max Supply : 3500 HODL
   * Fee Rate : 4.4%
   * Burn Rate : 4.4%
   * Team Fee : 1.2%
   */
  struct TransferInfo {
    uint256 rAmount;
    uint256 rTransferAmount;
    uint256 rFee;
    uint256 tTransferAmount;
    uint256 tFee;
    uint256 tBurn;
    uint256 rTeam;
    uint256 tTeam;
  }

  constructor() {
    _startBlock = block.number;
    _unlockBlock = _startBlock + _oneYearBlocks; // Lockup 해제 블럭 설정

    _rOwned[_msgSender()] = _rTotal;
    emit Transfer(address(0), _msgSender(), _tTotal);
  }

  /**
   * @dev Balance of HODL
   * In case of excluded account, use tOwned
   * In case of excluded account, use reflected _rOwned
   */
  function balanceOf(address account) public view override returns (uint256) {
    if (_isExcluded[account]) return _tOwned[account];
    return tokenFromReflection(_rOwned[account]);
  }

  /**
   * @dev Get reflected quantity
   */
  function tokenFromReflection(uint256 rAmount) public view returns (uint256) {
    require(rAmount <= _rTotal, "Amount must be less than total reflections");
    uint256 currentRate = _getRate();
    return rAmount.div(currentRate);
  }

  /**
   * @dev Get reflection rate
   */
  function _getRate() private view returns (uint256) {
    (uint256 rSupply, uint256 tSupply) = _getCurrentSupply();
    return rSupply.div(tSupply);
  }

  /**
   * @dev Get Current Supply(rTotal, tTotal)
   * The excluded account(_excluded) quantity is subtracted.
   */
  function _getCurrentSupply() private view returns (uint256, uint256) {
    uint256 rSupply = _rTotal;
    uint256 tSupply = _tTotal;
    for (uint256 i = 0; i < _excluded.length; i++) {
      if (_rOwned[_excluded[i]] > rSupply || _tOwned[_excluded[i]] > tSupply)
        return (_rTotal, _tTotal);
      rSupply = rSupply.sub(_rOwned[_excluded[i]]);
      tSupply = tSupply.sub(_tOwned[_excluded[i]]);
    }
    if (rSupply < _rTotal.div(_tTotal)) return (_rTotal, _tTotal);
    return (rSupply, tSupply);
  }

  /**
   * @dev Transfer Token
   */
  function transfer(address recipient, uint256 amount)
    public
    override
    returns (bool)
  {
    _transfer(_msgSender(), recipient, amount);
    return true;
  }

  /**
   * @dev Transfer Token from account to account
   * 기능적으로는 없어도 될 것 같은데, 참고 토큰 코드에 있어서 일단 포함시켜봅니다.
   * 일반적으로 transferFrom이 사용 되는 경우와
   * 아래와 같이 _approve에 _allowances[sender][_msgSender()] 처럼
   * _allowances의 두번째 값이 recipient가 아닌 _msgSender()이 사용 된 이유가
   * 이해가 안가는 상황입니다.
   */
  function transferFrom(
    address sender,
    address recipient,
    uint256 amount
  ) public override returns (bool) {
    _transfer(sender, recipient, amount);
    _approve(
      sender,
      _msgSender(),
      _allowances[sender][_msgSender()].sub(
        amount,
        "BEP20: transfer amount exceeds allowance"
      )
    );
    return true;
  }

  /**
   * @dev Increase Allowance
   */
  function increaseAllowance(address spender, uint256 addedValue)
    public
    virtual
    returns (bool)
  {
    _approve(
      _msgSender(),
      spender,
      _allowances[_msgSender()][spender].add(addedValue)
    );
    return true;
  }

  /**
   * @dev Decrease Allowance
   */
  function decreaseAllowance(address spender, uint256 subtractedValue)
    public
    virtual
    returns (bool)
  {
    _approve(
      _msgSender(),
      spender,
      _allowances[_msgSender()][spender].sub(
        subtractedValue,
        "BEP20: decreased allowance below zero"
      )
    );
    return true;
  }

  /**
   * @dev Returns whether the account is excluded.
   */
  function isExcluded(address account) public view returns (bool) {
    return _isExcluded[account];
  }

  /**
   * @dev Returns total amount of fee
   */
  function totalFees() public view returns (uint256) {
    return _tFeeTotal;
  }

  /**
   * @dev Returns total amount of burning
   */
  function totalBurn() public view returns (uint256) {
    return _tBurnTotal;
  }

  /**
   * @dev Returns excluded account list
   */
  function getExcludeList() public view returns (address[] memory) {
    return _excluded;
  }

  /**
   * @dev Returns locked up account list
   */
  function getLockupList() public view returns (address[] memory) {
    return _lockupList;
  }

  /**
   * @dev Returns reflection value by tAmount
   */
  function reflectionFromToken(uint256 tAmount, bool deductTransferFee)
    public
    view
    returns (uint256)
  {
    require(tAmount <= _tTotal, "Amount must be less than supply");
    if (!deductTransferFee) {
      TransferInfo memory transferInfo = _getValues(tAmount);
      return transferInfo.rAmount;
    } else {
      TransferInfo memory transferInfo = _getValues(tAmount);
      return transferInfo.rTransferAmount;
    }
  }

  /**
   * @dev Exclude excluded account
   */
  function excludeAccount(address account) external onlyOwner() {
    require(account != _ROUTER_ADDRESS, "We can not exclude router address.");
    require(!_isExcluded[account], "Account is already excluded");
    if (_rOwned[account] > 0) {
      _tOwned[account] = tokenFromReflection(_rOwned[account]);
    }
    _isExcluded[account] = true;
    _excluded.push(account);
  }

  /**
   * @dev Include exclude account
   */
  function includeAccount(address account) external onlyOwner() {
    require(_isExcluded[account], "Account is already included");
    for (uint256 i = 0; i < _excluded.length; i++) {
      if (_excluded[i] == account) {
        _excluded[i] = _excluded[_excluded.length - 1];
        _tOwned[account] = 0;
        _isExcluded[account] = false;
        _excluded.pop();
        break;
      }
    }
  }

  /**
   * @dev Include lock up account
   * It doesn't exist lock up release function
   * Registered account can be transferred after unlock blocknumber
   */
  function includeLockupAccount(address account) external onlyOwner() {
    require(!_isLocked[account], "Account is already locked up");
    _isLocked[account] = true;
    _lockupList.push(account);
  }

  /**
   * @dev Allow transmission amount from account to account
   */
  function _approve(
    address owner,
    address spender,
    uint256 amount
  ) private {
    require(owner != address(0), "BEP20: approve from the zero address");
    require(spender != address(0), "BEP20: approve to the zero address");

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

  /**
   * @dev Transfer token from account to account
   * Call different transfer functions depending on whether the account is excluded
   */
  function _transfer(
    address sender,
    address recipient,
    uint256 amount
  ) private {
    if (_isLocked[sender]) {
      require(block.number > _unlockBlock, "Sender is locked yet");
    }

    require(sender != address(0), "BEP20: transfer from the zero address");
    require(recipient != address(0), "BEP20: transfer to the zero address");
    require(amount > 0, "Transfer amount must be greater than zero");

    if (sender != owner() && recipient != owner())
      require(
        amount <= _MAX_TX_SIZE,
        "Transfer amount exceeds the maxTxAmount."
      );

    if (_isExcluded[sender] && !_isExcluded[recipient]) {
      _transferFromExcluded(sender, recipient, amount);
    } else if (!_isExcluded[sender] && _isExcluded[recipient]) {
      _transferToExcluded(sender, recipient, amount);
    } else if (!_isExcluded[sender] && !_isExcluded[recipient]) {
      _transferStandard(sender, recipient, amount);
    } else if (_isExcluded[sender] && _isExcluded[recipient]) {
      _transferBothExcluded(sender, recipient, amount);
    } else {
      _transferStandard(sender, recipient, amount);
    }
  }

  /**
   * @dev Set whether to apply fee
   */
  function setFee(bool isAppliedFee) external onlyOwner() {
    _isAppliedFee = isAppliedFee;
  }

  /**
   * @dev Set whether to apply burn
   */
  function setBurn(bool isAppliedBurn) external onlyOwner() {
    _isAppliedBurn = isAppliedBurn;
  }

  /**
   * @dev Set whether to apply teamfee
   */
  function setTeamFee(bool isAppliedTeamFee) external onlyOwner() {
    _isAppliedTeamFee = isAppliedTeamFee;
  }

  /**
   * @dev Return whether to apply fee
   */
  function getFeeApplied() public view returns (bool) {
    return _isAppliedFee;
  }

  /**
   * @dev Return whether to apply burn
   */
  function getBurnApplied() public view returns (bool) {
    return _isAppliedBurn;
  }

  /**
   * @dev Return whether to apply teamfee
   */
  function getTeamFeeApplied() public view returns (bool) {
    return _isAppliedTeamFee;
  }

  /**
   * @dev Set teamfee address
   */
  function setTeamAddress(address teamAddress) public onlyOwner() {
    _teamAddress = teamAddress;
  }

  /**
   * @dev Transfer from normal account to excluded account
   */
  function _transferToExcluded(
    address sender,
    address recipient,
    uint256 tAmount
  ) private {
    uint256 currentRate = _getRate();
    TransferInfo memory transferInfo = _getValues(tAmount);
    uint256 rBurn = transferInfo.tBurn.mul(currentRate);
    _rOwned[_teamAddress] = _rOwned[_teamAddress].add(transferInfo.rTeam);
    _rOwned[sender] = _rOwned[sender].sub(transferInfo.rAmount);
    _tOwned[recipient] = _tOwned[recipient].add(transferInfo.tTransferAmount);
    _rOwned[recipient] = _rOwned[recipient].add(transferInfo.rTransferAmount);
    _reflectFee(rBurn, transferInfo);
    emit Transfer(sender, recipient, transferInfo.tTransferAmount);
  }

  /**
   * @dev Transfer from excluded account to normal account
   */
  function _transferFromExcluded(
    address sender,
    address recipient,
    uint256 tAmount
  ) private {
    uint256 currentRate = _getRate();
    TransferInfo memory transferInfo = _getValues(tAmount);
    uint256 rBurn = transferInfo.tBurn.mul(currentRate);
    _rOwned[_teamAddress] = _rOwned[_teamAddress].add(transferInfo.rTeam);
    _tOwned[sender] = _tOwned[sender].sub(tAmount);
    _rOwned[sender] = _rOwned[sender].sub(transferInfo.rAmount);
    _rOwned[recipient] = _rOwned[recipient].add(transferInfo.rTransferAmount);
    _reflectFee(rBurn, transferInfo);
    emit Transfer(sender, recipient, transferInfo.tTransferAmount);
  }

  /**
   * @dev Transfer from excluded account to excluded account
   */
  function _transferBothExcluded(
    address sender,
    address recipient,
    uint256 tAmount
  ) private {
    uint256 currentRate = _getRate();
    TransferInfo memory transferInfo = _getValues(tAmount);
    uint256 rBurn = transferInfo.tBurn.mul(currentRate);
    _rOwned[_teamAddress] = _rOwned[_teamAddress].add(transferInfo.rTeam);
    _tOwned[sender] = _tOwned[sender].sub(tAmount);
    _rOwned[sender] = _rOwned[sender].sub(transferInfo.rAmount);
    _tOwned[recipient] = _tOwned[recipient].add(transferInfo.tTransferAmount);
    _rOwned[recipient] = _rOwned[recipient].add(transferInfo.rTransferAmount);
    _reflectFee(rBurn, transferInfo);
    emit Transfer(sender, recipient, transferInfo.tTransferAmount);
  }

  /**
   * @dev Transfer from normal account to normal account
   */
  function _transferStandard(
    address sender,
    address recipient,
    uint256 tAmount
  ) private {
    uint256 currentRate = _getRate();
    TransferInfo memory transferInfo = _getValues(tAmount);
    uint256 rBurn = transferInfo.tBurn.mul(currentRate);
    _rOwned[_teamAddress] = _rOwned[_teamAddress].add(transferInfo.rTeam);
    _rOwned[sender] = _rOwned[sender].sub(transferInfo.rAmount);
    _rOwned[recipient] = _rOwned[recipient].add(transferInfo.rTransferAmount);
    _reflectFee(rBurn, transferInfo);
    emit Transfer(sender, recipient, transferInfo.tTransferAmount);
  }

  /**
   * @dev Set global variables(rTotal, TotalFee, TotalBurn, tTotal)
   */
  function _reflectFee(uint256 rBurn, TransferInfo memory transferInfo)
    private
  {
    _rTotal = _rTotal.sub(transferInfo.rFee).sub(rBurn);
    _tFeeTotal = _tFeeTotal.add(transferInfo.tFee);
    _tBurnTotal = _tBurnTotal.add(transferInfo.tBurn);
    _tTotal = _tTotal.sub(transferInfo.tBurn);
  }

  /**
   * @dev Returns an TransferInfo(various values about transmission).
   */
  function _getValues(uint256 tAmount)
    private
    view
    returns (TransferInfo memory)
  {
    TransferInfo memory transferInfo = _getTValues(
      tAmount,
      _TAX_FEE,
      _BURN_FEE,
      _TEAM_FEE
    );
    uint256 currentRate = _getRate();
    _getRValues(tAmount, transferInfo, currentRate);
    return transferInfo;
  }

  /**
   * @dev Returns transfer info about tValues(real amount)
   */
  function _getTValues(
    uint256 tAmount,
    uint256 taxFee,
    uint256 burnFee,
    uint256 teamFee
  ) private view returns (TransferInfo memory) {
    uint256 tFee = _isAppliedFee
      ? ((tAmount.mul(taxFee)).div(_GRANULARITY)).div(100)
      : 0; // _GRANULARITY = 100
    uint256 tBurn = _isAppliedBurn
      ? ((tAmount.mul(burnFee)).div(_GRANULARITY)).div(100)
      : 0;
    uint256 tTeam = _isAppliedTeamFee
      ? ((tAmount.mul(teamFee)).div(_GRANULARITY)).div(100)
      : 0;
    uint256 tTransferAmount = tAmount.sub(tFee).sub(tBurn).sub(tTeam);
    TransferInfo memory transferInfo = TransferInfo(
      0,
      0,
      0,
      tTransferAmount,
      tFee,
      tBurn,
      0,
      tTeam
    );
    return transferInfo;
  }

  /**
   * @dev Returns transfer info about rValues(reflection amount)
   */
  function _getRValues(
    uint256 tAmount,
    TransferInfo memory transferInfo,
    uint256 currentRate
  ) private pure returns (TransferInfo memory) {
    transferInfo.rAmount = tAmount.mul(currentRate);
    transferInfo.rFee = transferInfo.tFee.mul(currentRate);
    uint256 rBurn = transferInfo.tBurn.mul(currentRate);
    transferInfo.rTeam = transferInfo.tTeam.mul(currentRate);
    transferInfo.rTransferAmount = transferInfo
    .rAmount
    .sub(transferInfo.rFee)
    .sub(rBurn)
    .sub(transferInfo.rTeam);
    return transferInfo;
  }

  /**
   * @dev Returns the fee value
   */
  function _getTaxFee() private pure returns (uint256) {
    return _TAX_FEE;
  }

  /**
   * @dev Returns the maximum transfer quantity
   */
  function _getMaxTxAmount() private pure returns (uint256) {
    return _MAX_TX_SIZE;
  }

  /**
   * @dev Returns the token name
   */
  function name() public pure returns (string memory) {
    return _NAME;
  }

  /**
   * @dev Returns the token symbol
   */
  function symbol() public pure returns (string memory) {
    return _SYMBOL;
  }

  /**
   * @dev Returns the token decimals
   */
  function decimals() public pure returns (uint8) {
    return _DECIMALS;
  }

  /**
   * @dev Returns the total supply
   */
  function totalSupply() public view override returns (uint256) {
    return _tTotal;
  }

  /**
   * @dev Returns allowance amount from owner to spender
   */
  function allowance(address owner, address spender)
    public
    view
    override
    returns (uint256)
  {
    return _allowances[owner][spender];
  }

  /**
   * @dev Set allowance amount from msgSender to spender
   */
  function approve(address spender, uint256 amount)
    public
    override
    returns (bool)
  {
    _approve(_msgSender(), spender, amount);
    return true;
  }
}

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"excludeAccount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"getBurnApplied","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getExcludeList","outputs":[{"internalType":"address[]","name":"","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getFeeApplied","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getLockupList","outputs":[{"internalType":"address[]","name":"","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getTeamFeeApplied","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeAccount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"includeLockupAccount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcluded","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tAmount","type":"uint256"},{"internalType":"bool","name":"deductTransferFee","type":"bool"}],"name":"reflectionFromToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"isAppliedBurn","type":"bool"}],"name":"setBurn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"isAppliedFee","type":"bool"}],"name":"setFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"teamAddress","type":"address"}],"name":"setTeamAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"isAppliedTeamFee","type":"bool"}],"name":"setTeamFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"rAmount","type":"uint256"}],"name":"tokenFromReflection","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalBurn","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalFees","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":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"}]

6080604052600860ff16600a620000179190620003ee565b610dac6200002691906200052b565b6006556006546000196200003b9190620005d1565b6000196200004a91906200058c565b600755739a1789bdcbb549fcc19ee559921de904f09c6132600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550737a250d5630b4cf539739df2c5dacb4c659f2488d600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555062a06680600e556000601160006101000a81548160ff0219169083151502179055506000601160016101000a81548160ff0219169083151502179055506000601160026101000a81548160ff0219169083151502179055503480156200015c57600080fd5b5060006200016f6200030060201b60201c565b9050806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35043600c81905550600e54600c5462000226919062000336565b600d8190555060075460016000620002436200030060201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550620002916200030060201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600654604051620002f2919062000319565b60405180910390a362000674565b600033905090565b6200031381620005c7565b82525050565b600060208201905062000330600083018462000308565b92915050565b60006200034382620005c7565b91506200035083620005c7565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111562000388576200038762000609565b5b828201905092915050565b6000808291508390505b6001851115620003e557808604811115620003bd57620003bc62000609565b5b6001851615620003cd5780820291505b8081029050620003dd8562000667565b94506200039d565b94509492505050565b6000620003fb82620005c7565b91506200040883620005c7565b9250620004377fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff84846200043f565b905092915050565b60008262000451576001905062000524565b8162000461576000905062000524565b81600181146200047a57600281146200048557620004bb565b600191505062000524565b60ff8411156200049a576200049962000609565b5b8360020a915084821115620004b457620004b362000609565b5b5062000524565b5060208310610133831016604e8410600b8410161715620004f55782820a905083811115620004ef57620004ee62000609565b5b62000524565b62000504848484600162000393565b925090508184048111156200051e576200051d62000609565b5b81810290505b9392505050565b60006200053882620005c7565b91506200054583620005c7565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161562000581576200058062000609565b5b828202905092915050565b60006200059982620005c7565b9150620005a683620005c7565b925082821015620005bc57620005bb62000609565b5b828203905092915050565b6000819050919050565b6000620005de82620005c7565b9150620005eb83620005c7565b925082620005fe57620005fd62000638565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60008160011c9050919050565b614ad780620006846000396000f3fe608060405234801561001057600080fd5b50600436106101e55760003560e01c806370a082311161010f578063c9cc255c116100a2578063f2cc0c1811610071578063f2cc0c18146105aa578063f2fde38b146105c6578063f84354f1146105e2578063ffe1a886146105fe576101e5565b8063c9cc255c14610512578063cba0e9961461052e578063d35373331461055e578063dd62ed3e1461057a576101e5565b8063a457c2d7116100de578063a457c2d714610478578063a9059cbb146104a8578063b3dcd564146104d8578063bd55cf0d146104f6576101e5565b806370a0823114610402578063715018a6146104325780638da5cb5b1461043c57806395d89b411461045a576101e5565b806323b872dd116101875780633c9f861d116101565780633c9f861d1461037a5780634549b039146103985780636690864e146103c857806367c61233146103e4576101e5565b806323b872dd146102cc5780632d838119146102fc578063313ce5671461032c578063395093511461034a576101e5565b8063095ea7b3116101c3578063095ea7b314610242578063126e5a8f1461027257806313114a9d1461029057806318160ddd146102ae576101e5565b8063024bf17b146101ea578063025a48651461020857806306fdde0314610224575b600080fd5b6101f261061c565b6040516101ff9190613ebc565b60405180910390f35b610222600480360381019061021d9190613a98565b610633565b005b61022c6106e5565b6040516102399190613ed7565b60405180910390f35b61025c60048036038101906102579190613a58565b610722565b6040516102699190613ebc565b60405180910390f35b61027a610740565b6040516102879190613ebc565b60405180910390f35b610298610757565b6040516102a59190614119565b60405180910390f35b6102b6610761565b6040516102c39190614119565b60405180910390f35b6102e660048036038101906102e19190613a05565b61076b565b6040516102f39190613ebc565b60405180910390f35b61031660048036038101906103119190613ac5565b610844565b6040516103239190614119565b60405180910390f35b6103346108b2565b6040516103419190614134565b60405180910390f35b610364600480360381019061035f9190613a58565b6108bb565b6040516103719190613ebc565b60405180910390f35b61038261096e565b60405161038f9190614119565b60405180910390f35b6103b260048036038101906103ad9190613af2565b610978565b6040516103bf9190614119565b60405180910390f35b6103e260048036038101906103dd9190613998565b6109fa565b005b6103ec610ad3565b6040516103f99190613ebc565b60405180910390f35b61041c60048036038101906104179190613998565b610aea565b6040516104299190614119565b60405180910390f35b61043a610bd5565b005b610444610d28565b6040516104519190613e7f565b60405180910390f35b610462610d51565b60405161046f9190613ed7565b60405180910390f35b610492600480360381019061048d9190613a58565b610d8e565b60405161049f9190613ebc565b60405180910390f35b6104c260048036038101906104bd9190613a58565b610e5b565b6040516104cf9190613ebc565b60405180910390f35b6104e0610e79565b6040516104ed9190613e9a565b60405180910390f35b610510600480360381019061050b9190613a98565b610f07565b005b61052c60048036038101906105279190613998565b610fb9565b005b61054860048036038101906105439190613998565b611199565b6040516105559190613ebc565b60405180910390f35b61057860048036038101906105739190613a98565b6111ef565b005b610594600480360381019061058f91906139c5565b6112a1565b6040516105a19190614119565b60405180910390f35b6105c460048036038101906105bf9190613998565b611328565b005b6105e060048036038101906105db9190613998565b61166d565b005b6105fc60048036038101906105f79190613998565b61182f565b005b610606611b7e565b6040516106139190613e9a565b60405180910390f35b6000601160009054906101000a900460ff16905090565b61063b611c0c565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146106c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106bf90614079565b60405180910390fd5b80601160006101000a81548160ff02191690831515021790555050565b60606040518060400160405280600581526020017f484f444c53000000000000000000000000000000000000000000000000000000815250905090565b600061073661072f611c0c565b8484611c14565b6001905092915050565b6000601160029054906101000a900460ff16905090565b6000600854905090565b6000600654905090565b6000610778848484611ddf565b61083984610784611c0c565b61083485604051806060016040528060288152602001614a5560289139600360008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006107ea611c0c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546123699092919063ffffffff16565b611c14565b600190509392505050565b600060075482111561088b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161088290613f59565b60405180910390fd5b60006108956123cd565b90506108aa81846123f890919063ffffffff16565b915050919050565b60006008905090565b60006109646108c8611c0c565b8461095f85600360006108d9611c0c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461244290919063ffffffff16565b611c14565b6001905092915050565b6000600954905090565b60006006548311156109bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109b690614019565b60405180910390fd5b816109de5760006109cf846124a0565b905080600001519150506109f4565b60006109e9846124a0565b905080602001519150505b92915050565b610a02611c0c565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610a8f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a8690614079565b60405180910390fd5b80600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000601160019054906101000a900460ff16905090565b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615610b8557600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050610bd0565b610bcd600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610844565b90505b919050565b610bdd611c0c565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610c6a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c6190614079565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a360008060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606040518060400160405280600481526020017f484f444c00000000000000000000000000000000000000000000000000000000815250905090565b6000610e51610d9b611c0c565b84610e4c85604051806060016040528060258152602001614a7d6025913960036000610dc5611c0c565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546123699092919063ffffffff16565b611c14565b6001905092915050565b6000610e6f610e68611c0c565b8484611ddf565b6001905092915050565b60606010805480602002602001604051908101604052809291908181526020018280548015610efd57602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019060010190808311610eb3575b5050505050905090565b610f0f611c0c565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610f9c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f9390614079565b60405180910390fd5b80601160016101000a81548160ff02191690831515021790555050565b610fc1611c0c565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461104e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161104590614079565b60405180910390fd5b600f60008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156110db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110d290613fd9565b60405180910390fd5b6001600f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506010819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b6111f7611c0c565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611284576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161127b90614079565b60405180910390fd5b80601160026101000a81548160ff02191690831515021790555050565b6000600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b611330611c0c565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146113bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113b490614079565b60405180910390fd5b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561144e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161144590613f19565b60405180910390fd5b600460008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16156114db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114d290613fb9565b60405180910390fd5b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205411156115af5761156b600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610844565b600260008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505b6001600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506005819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b611675611c0c565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611702576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116f990614079565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611772576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161176990613f79565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b611837611c0c565b73ffffffffffffffffffffffffffffffffffffffff1660008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146118c4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118bb90614079565b60405180910390fd5b600460008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16611950576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161194790613ff9565b60405180910390fd5b60005b600580549050811015611b7a578173ffffffffffffffffffffffffffffffffffffffff166005828154811061198b5761198a614588565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415611b6757600560016005805490506119e691906143f6565b815481106119f7576119f6614588565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660058281548110611a3657611a35614588565b5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506005805480611b2d57611b2c614559565b5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690559055611b7a565b8080611b72906144b2565b915050611953565b5050565b60606005805480602002602001604051908101604052809291908181526020018280548015611c0257602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019060010190808311611bb8575b5050505050905090565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611c84576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c7b90613f39565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611cf4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ceb906140f9565b60405180910390fd5b80600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611dd29190614119565b60405180910390a3505050565b600f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615611e7657600d544311611e75576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e6c906140d9565b60405180910390fd5b5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611ee6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611edd90613ef9565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611f56576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f4d906140b9565b60405180910390fd5b60008111611f99576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f9090614099565b60405180910390fd5b611fa1610d28565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561200f5750611fdf610d28565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b1561207557600860ff16600a612025919061427e565b610dac612032919061439c565b811115612074576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161206b90614039565b60405180910390fd5b5b600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156121185750600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561212d576121288383836124dd565b612364565b600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156121d05750600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b156121e5576121e0838383612830565b612363565b600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161580156122895750600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561229e57612299838383612b87565b612362565b600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156123405750600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b1561235557612350838383612e45565b612361565b612360838383612b87565b5b5b5b5b505050565b60008383111582906123b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123a89190613ed7565b60405180910390fd5b50600083856123c091906143f6565b9050809150509392505050565b60008060006123da613231565b915091506123f181836123f890919063ffffffff16565b9250505090565b600061243a83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506134e4565b905092915050565b600080828461245191906141a4565b905083811015612496576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161248d90613f99565b60405180910390fd5b8091505092915050565b6124a8613914565b60006124b9836101b8806078613547565b905060006124c56123cd565b90506124d28483836136e7565b508192505050919050565b60006124e76123cd565b905060006124f4836124a0565b9050600061250f838360a001516137bd90919063ffffffff16565b90506125898260c0015160016000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461244290919063ffffffff16565b60016000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555061264084600260008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461383890919063ffffffff16565b600260008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506126d98260000151600160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461383890919063ffffffff16565b600160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506127728260200151600160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461244290919063ffffffff16565b600160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506127bf8183613882565b8473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84606001516040516128209190614119565b60405180910390a3505050505050565b600061283a6123cd565b90506000612847836124a0565b90506000612862838360a001516137bd90919063ffffffff16565b90506128dc8260c0015160016000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461244290919063ffffffff16565b60016000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506129978260000151600160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461383890919063ffffffff16565b600160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612a308260600151600260008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461244290919063ffffffff16565b600260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612ac98260200151600160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461244290919063ffffffff16565b600160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612b168183613882565b8473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460600151604051612b779190614119565b60405180910390a3505050505050565b6000612b916123cd565b90506000612b9e836124a0565b90506000612bb9838360a001516137bd90919063ffffffff16565b9050612c338260c0015160016000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461244290919063ffffffff16565b60016000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612cee8260000151600160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461383890919063ffffffff16565b600160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612d878260200151600160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461244290919063ffffffff16565b600160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612dd48183613882565b8473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460600151604051612e359190614119565b60405180910390a3505050505050565b6000612e4f6123cd565b90506000612e5c836124a0565b90506000612e77838360a001516137bd90919063ffffffff16565b9050612ef18260c0015160016000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461244290919063ffffffff16565b60016000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550612fa884600260008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461383890919063ffffffff16565b600260008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506130418260000151600160008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461383890919063ffffffff16565b600160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506130da8260600151600260008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461244290919063ffffffff16565b600260008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506131738260200151600160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461244290919063ffffffff16565b600160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055506131c08183613882565b8473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84606001516040516132219190614119565b60405180910390a3505050505050565b600080600060075490506000600654905060005b6005805490508110156134a75782600160006005848154811061326b5761326a614588565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054118061335957508160026000600584815481106132f1576132f0614588565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054115b1561337057600754600654945094505050506134e0565b613400600160006005848154811061338b5761338a614588565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548461383890919063ffffffff16565b9250613492600260006005848154811061341d5761341c614588565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020548361383890919063ffffffff16565b9150808061349f906144b2565b915050613245565b506134bf6006546007546123f890919063ffffffff16565b8210156134d7576007546006549350935050506134e0565b81819350935050505b9091565b6000808311829061352b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016135229190613ed7565b60405180910390fd5b506000838561353a91906141fa565b9050809150509392505050565b61354f613914565b6000601160009054906101000a900460ff1661356c5760006135a6565b6135a560646135976064613589898b6137bd90919063ffffffff16565b6123f890919063ffffffff16565b6123f890919063ffffffff16565b5b90506000601160019054906101000a900460ff166135c55760006135ff565b6135fe60646135f060646135e2898c6137bd90919063ffffffff16565b6123f890919063ffffffff16565b6123f890919063ffffffff16565b5b90506000601160029054906101000a900460ff1661361e576000613658565b6136576064613649606461363b898d6137bd90919063ffffffff16565b6123f890919063ffffffff16565b6123f890919063ffffffff16565b5b905060006136938261368585613677888e61383890919063ffffffff16565b61383890919063ffffffff16565b61383890919063ffffffff16565b90506000604051806101000160405280600081526020016000815260200160008152602001838152602001868152602001858152602001600081526020018481525090508095505050505050949350505050565b6136ef613914565b61370282856137bd90919063ffffffff16565b8360000181815250506137228284608001516137bd90919063ffffffff16565b8360400181815250506000613744838560a001516137bd90919063ffffffff16565b905061375d838560e001516137bd90919063ffffffff16565b8460c00181815250506137a98460c0015161379b8361378d8860400151896000015161383890919063ffffffff16565b61383890919063ffffffff16565b61383890919063ffffffff16565b846020018181525050839150509392505050565b6000808314156137d05760009050613832565b600082846137de919061439c565b90508284826137ed91906141fa565b1461382d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161382490614059565b60405180910390fd5b809150505b92915050565b600061387a83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612369565b905092915050565b6138ad8261389f836040015160075461383890919063ffffffff16565b61383890919063ffffffff16565b6007819055506138cc816080015160085461244290919063ffffffff16565b6008819055506138eb8160a0015160095461244290919063ffffffff16565b60098190555061390a8160a0015160065461383890919063ffffffff16565b6006819055505050565b60405180610100016040528060008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b60008135905061396881614a0f565b92915050565b60008135905061397d81614a26565b92915050565b60008135905061399281614a3d565b92915050565b6000602082840312156139ae576139ad6145b7565b5b60006139bc84828501613959565b91505092915050565b600080604083850312156139dc576139db6145b7565b5b60006139ea85828601613959565b92505060206139fb85828601613959565b9150509250929050565b600080600060608486031215613a1e57613a1d6145b7565b5b6000613a2c86828701613959565b9350506020613a3d86828701613959565b9250506040613a4e86828701613983565b9150509250925092565b60008060408385031215613a6f57613a6e6145b7565b5b6000613a7d85828601613959565b9250506020613a8e85828601613983565b9150509250929050565b600060208284031215613aae57613aad6145b7565b5b6000613abc8482850161396e565b91505092915050565b600060208284031215613adb57613ada6145b7565b5b6000613ae984828501613983565b91505092915050565b60008060408385031215613b0957613b086145b7565b5b6000613b1785828601613983565b9250506020613b288582860161396e565b9150509250929050565b6000613b3e8383613b4a565b60208301905092915050565b613b538161442a565b82525050565b613b628161442a565b82525050565b6000613b738261415f565b613b7d8185614182565b9350613b888361414f565b8060005b83811015613bb9578151613ba08882613b32565b9750613bab83614175565b925050600181019050613b8c565b5085935050505092915050565b613bcf8161443c565b82525050565b6000613be08261416a565b613bea8185614193565b9350613bfa81856020860161447f565b613c03816145bc565b840191505092915050565b6000613c1b602583614193565b9150613c26826145da565b604082019050919050565b6000613c3e602283614193565b9150613c4982614629565b604082019050919050565b6000613c61602483614193565b9150613c6c82614678565b604082019050919050565b6000613c84602a83614193565b9150613c8f826146c7565b604082019050919050565b6000613ca7602683614193565b9150613cb282614716565b604082019050919050565b6000613cca601b83614193565b9150613cd582614765565b602082019050919050565b6000613ced601b83614193565b9150613cf88261478e565b602082019050919050565b6000613d10601c83614193565b9150613d1b826147b7565b602082019050919050565b6000613d33601b83614193565b9150613d3e826147e0565b602082019050919050565b6000613d56601f83614193565b9150613d6182614809565b602082019050919050565b6000613d79602883614193565b9150613d8482614832565b604082019050919050565b6000613d9c602183614193565b9150613da782614881565b604082019050919050565b6000613dbf602083614193565b9150613dca826148d0565b602082019050919050565b6000613de2602983614193565b9150613ded826148f9565b604082019050919050565b6000613e05602383614193565b9150613e1082614948565b604082019050919050565b6000613e28601483614193565b9150613e3382614997565b602082019050919050565b6000613e4b602283614193565b9150613e56826149c0565b604082019050919050565b613e6a81614468565b82525050565b613e7981614472565b82525050565b6000602082019050613e946000830184613b59565b92915050565b60006020820190508181036000830152613eb48184613b68565b905092915050565b6000602082019050613ed16000830184613bc6565b92915050565b60006020820190508181036000830152613ef18184613bd5565b905092915050565b60006020820190508181036000830152613f1281613c0e565b9050919050565b60006020820190508181036000830152613f3281613c31565b9050919050565b60006020820190508181036000830152613f5281613c54565b9050919050565b60006020820190508181036000830152613f7281613c77565b9050919050565b60006020820190508181036000830152613f9281613c9a565b9050919050565b60006020820190508181036000830152613fb281613cbd565b9050919050565b60006020820190508181036000830152613fd281613ce0565b9050919050565b60006020820190508181036000830152613ff281613d03565b9050919050565b6000602082019050818103600083015261401281613d26565b9050919050565b6000602082019050818103600083015261403281613d49565b9050919050565b6000602082019050818103600083015261405281613d6c565b9050919050565b6000602082019050818103600083015261407281613d8f565b9050919050565b6000602082019050818103600083015261409281613db2565b9050919050565b600060208201905081810360008301526140b281613dd5565b9050919050565b600060208201905081810360008301526140d281613df8565b9050919050565b600060208201905081810360008301526140f281613e1b565b9050919050565b6000602082019050818103600083015261411281613e3e565b9050919050565b600060208201905061412e6000830184613e61565b92915050565b60006020820190506141496000830184613e70565b92915050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b60006141af82614468565b91506141ba83614468565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156141ef576141ee6144fb565b5b828201905092915050565b600061420582614468565b915061421083614468565b9250826142205761421f61452a565b5b828204905092915050565b6000808291508390505b600185111561427557808604811115614251576142506144fb565b5b60018516156142605780820291505b808102905061426e856145cd565b9450614235565b94509492505050565b600061428982614468565b915061429483614468565b92506142c17fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff84846142c9565b905092915050565b6000826142d95760019050614395565b816142e75760009050614395565b81600181146142fd576002811461430757614336565b6001915050614395565b60ff841115614319576143186144fb565b5b8360020a9150848211156143305761432f6144fb565b5b50614395565b5060208310610133831016604e8410600b841016171561436b5782820a905083811115614366576143656144fb565b5b614395565b614378848484600161422b565b9250905081840481111561438f5761438e6144fb565b5b81810290505b9392505050565b60006143a782614468565b91506143b283614468565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156143eb576143ea6144fb565b5b828202905092915050565b600061440182614468565b915061440c83614468565b92508282101561441f5761441e6144fb565b5b828203905092915050565b600061443582614448565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b60005b8381101561449d578082015181840152602081019050614482565b838111156144ac576000848401525b50505050565b60006144bd82614468565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156144f0576144ef6144fb565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600080fd5b6000601f19601f8301169050919050565b60008160011c9050919050565b7f42455032303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f57652063616e206e6f74206578636c75646520726f757465722061646472657360008201527f732e000000000000000000000000000000000000000000000000000000000000602082015250565b7f42455032303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f416d6f756e74206d757374206265206c657373207468616e20746f74616c207260008201527f65666c656374696f6e7300000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b7f4163636f756e7420697320616c7265616479206578636c756465640000000000600082015250565b7f4163636f756e7420697320616c7265616479206c6f636b656420757000000000600082015250565b7f4163636f756e7420697320616c726561647920696e636c756465640000000000600082015250565b7f416d6f756e74206d757374206265206c657373207468616e20737570706c7900600082015250565b7f5472616e7366657220616d6f756e74206578636565647320746865206d61785460008201527f78416d6f756e742e000000000000000000000000000000000000000000000000602082015250565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60008201527f7700000000000000000000000000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f5472616e7366657220616d6f756e74206d75737420626520677265617465722060008201527f7468616e207a65726f0000000000000000000000000000000000000000000000602082015250565b7f42455032303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f53656e646572206973206c6f636b656420796574000000000000000000000000600082015250565b7f42455032303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b614a188161442a565b8114614a2357600080fd5b50565b614a2f8161443c565b8114614a3a57600080fd5b50565b614a4681614468565b8114614a5157600080fd5b5056fe42455032303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636542455032303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220e61109971590905530e0cb8f5e544d9c94c1fd65f0cb4be3a21ab346104a8db664736f6c63430008050033

Deployed ByteCode Sourcemap

16597:18202:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27584:85;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27097:97;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33817:77;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34627:169;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27879:93;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22967:81;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34222:89;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21672:374;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19894:239;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34089:77;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22096:254;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23111:82;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23572:451;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28023:103;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27729:87;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19652:188;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15958:138;;;:::i;:::-;;15356:73;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33950:81;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22400:332;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21033:175;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23410:95;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27251:101;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25103:205;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22804:104;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27412:113;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34389:160;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24079:385;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;16241:230;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24519:412;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23254:94;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27584:85;27630:4;27650:13;;;;;;;;;;;27643:20;;27584:85;:::o;27097:97::-;15560:12;:10;:12::i;:::-;15550:22;;:6;;;;;;;;;;:22;;;15542:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;27176:12:::1;27160:13;;:28;;;;;;;;;;;;;;;;;;27097:97:::0;:::o;33817:77::-;33854:13;33883:5;;;;;;;;;;;;;;;;;33876:12;;33817:77;:::o;34627:169::-;34717:4;34733:39;34742:12;:10;:12::i;:::-;34756:7;34765:6;34733:8;:39::i;:::-;34786:4;34779:11;;34627:169;;;;:::o;27879:93::-;27929:4;27949:17;;;;;;;;;;;27942:24;;27879:93;:::o;22967:81::-;23009:7;23032:10;;23025:17;;22967:81;:::o;34222:89::-;34275:7;34298;;34291:14;;34222:89;:::o;21672:374::-;21790:4;21803:36;21813:6;21821:9;21832:6;21803:9;:36::i;:::-;21846:176;21863:6;21878:12;:10;:12::i;:::-;21899:116;21947:6;21899:116;;;;;;;;;;;;;;;;;:11;:19;21911:6;21899:19;;;;;;;;;;;;;;;:33;21919:12;:10;:12::i;:::-;21899:33;;;;;;;;;;;;;;;;:37;;:116;;;;;:::i;:::-;21846:8;:176::i;:::-;22036:4;22029:11;;21672:374;;;;;:::o;19894:239::-;19961:7;19996;;19985;:18;;19977:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;20057:19;20079:10;:8;:10::i;:::-;20057:32;;20103:24;20115:11;20103:7;:11;;:24;;;;:::i;:::-;20096:31;;;19894:239;;;:::o;34089:77::-;34130:5;17255:1;34144:16;;34089:77;:::o;22096:254::-;22199:4;22215:111;22232:12;:10;:12::i;:::-;22253:7;22269:50;22308:10;22269:11;:25;22281:12;:10;:12::i;:::-;22269:25;;;;;;;;;;;;;;;:34;22295:7;22269:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;22215:8;:111::i;:::-;22340:4;22333:11;;22096:254;;;;:::o;23111:82::-;23153:7;23176:11;;23169:18;;23111:82;:::o;23572:451::-;23678:7;23716;;23705;:18;;23697:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;23771:17;23766:252;;23799:32;23834:19;23845:7;23834:10;:19::i;:::-;23799:54;;23869:12;:20;;;23862:27;;;;;23766:252;23912:32;23947:19;23958:7;23947:10;:19::i;:::-;23912:54;;23982:12;:28;;;23975:35;;;23572:451;;;;;:::o;28023:103::-;15560:12;:10;:12::i;:::-;15550:22;;:6;;;;;;;;;;:22;;;15542:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;28109:11:::1;28094:12;;:26;;;;;;;;;;;;;;;;;;28023:103:::0;:::o;27729:87::-;27776:4;27796:14;;;;;;;;;;;27789:21;;27729:87;:::o;19652:188::-;19718:7;19738:11;:20;19750:7;19738:20;;;;;;;;;;;;;;;;;;;;;;;;;19734:49;;;19767:7;:16;19775:7;19767:16;;;;;;;;;;;;;;;;19760:23;;;;19734:49;19797:37;19817:7;:16;19825:7;19817:16;;;;;;;;;;;;;;;;19797:19;:37::i;:::-;19790:44;;19652:188;;;;:::o;15958:138::-;15560:12;:10;:12::i;:::-;15550:22;;:6;;;;;;;;;;:22;;;15542:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;16061:1:::1;16024:40;;16045:6;::::0;::::1;;;;;;;;16024:40;;;;;;;;;;;;16088:1;16071:6:::0;::::1;:19;;;;;;;;;;;;;;;;;;15958:138::o:0;15356:73::-;15394:7;15417:6;;;;;;;;;;;15410:13;;15356:73;:::o;33950:81::-;33989:13;34018:7;;;;;;;;;;;;;;;;;34011:14;;33950:81;:::o;22400:332::-;22508:4;22524:184;22541:12;:10;:12::i;:::-;22562:7;22578:123;22627:15;22578:123;;;;;;;;;;;;;;;;;:11;:25;22590:12;:10;:12::i;:::-;22578:25;;;;;;;;;;;;;;;:34;22604:7;22578:34;;;;;;;;;;;;;;;;:38;;:123;;;;;:::i;:::-;22524:8;:184::i;:::-;22722:4;22715:11;;22400:332;;;;:::o;21033:175::-;21126:4;21142:42;21152:12;:10;:12::i;:::-;21166:9;21177:6;21142:9;:42::i;:::-;21198:4;21191:11;;21033:175;;;;:::o;23410:95::-;23456:16;23488:11;23481:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23410:95;:::o;27251:101::-;15560:12;:10;:12::i;:::-;15550:22;;:6;;;;;;;;;;:22;;;15542:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;27333:13:::1;27316:14;;:30;;;;;;;;;;;;;;;;;;27251:101:::0;:::o;25103:205::-;15560:12;:10;:12::i;:::-;15550:22;;:6;;;;;;;;;;:22;;;15542:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;25187:9:::1;:18;25197:7;25187:18;;;;;;;;;;;;;;;;;;;;;;;;;25186:19;25178:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;25266:4;25245:9;:18;25255:7;25245:18;;;;;;;;;;;;;;;;:25;;;;;;;;;;;;;;;;;;25277:11;25294:7;25277:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25103:205:::0;:::o;22804:104::-;22862:4;22882:11;:20;22894:7;22882:20;;;;;;;;;;;;;;;;;;;;;;;;;22875:27;;22804:104;;;:::o;27412:113::-;15560:12;:10;:12::i;:::-;15550:22;;:6;;;;;;;;;;:22;;;15542:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;27503:16:::1;27483:17;;:36;;;;;;;;;;;;;;;;;;27412:113:::0;:::o;34389:160::-;34490:7;34516:11;:18;34528:5;34516:18;;;;;;;;;;;;;;;:27;34535:7;34516:27;;;;;;;;;;;;;;;;34509:34;;34389:160;;;;:::o;24079:385::-;15560:12;:10;:12::i;:::-;15550:22;;:6;;;;;;;;;;:22;;;15542:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;24167:15:::1;;;;;;;;;;;24156:26;;:7;:26;;;;24148:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;24237:11;:20;24249:7;24237:20;;;;;;;;;;;;;;;;;;;;;;;;;24236:21;24228:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;24319:1;24300:7;:16;24308:7;24300:16;;;;;;;;;;;;;;;;:20;24296:99;;;24350:37;24370:7;:16;24378:7;24370:16;;;;;;;;;;;;;;;;24350:19;:37::i;:::-;24331:7;:16;24339:7;24331:16;;;;;;;;;;;;;;;:56;;;;24296:99;24424:4;24401:11;:20;24413:7;24401:20;;;;;;;;;;;;;;;;:27;;;;;;;;;;;;;;;;;;24435:9;24450:7;24435:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24079:385:::0;:::o;16241:230::-;15560:12;:10;:12::i;:::-;15550:22;;:6;;;;;;;;;;:22;;;15542:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;16346:1:::1;16326:22;;:8;:22;;;;16318:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;16432:8;16403:38;;16424:6;::::0;::::1;;;;;;;;16403:38;;;;;;;;;;;;16457:8;16448:6;::::0;:17:::1;;;;;;;;;;;;;;;;;;16241:230:::0;:::o;24519:412::-;15560:12;:10;:12::i;:::-;15550:22;;:6;;;;;;;;;;:22;;;15542:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;24596:11:::1;:20;24608:7;24596:20;;;;;;;;;;;;;;;;;;;;;;;;;24588:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;24660:9;24655:271;24679:9;:16;;;;24675:1;:20;24655:271;;;24731:7;24715:23;;:9;24725:1;24715:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;:23;;;24711:208;;;24766:9;24795:1;24776:9;:16;;;;:20;;;;:::i;:::-;24766:31;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;24751:9;24761:1;24751:12;;;;;;;;:::i;:::-;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;24827:1;24808:7;:16;24816:7;24808:16;;;;;;;;;;;;;;;:20;;;;24862:5;24839:11;:20;24851:7;24839:20;;;;;;;;;;;;;;;;:28;;;;;;;;;;;;;;;;;;24878:9;:15;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;24904:5;;24711:208;24697:3;;;;;:::i;:::-;;;;24655:271;;;;24519:412:::0;:::o;23254:94::-;23301:16;23333:9;23326:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23254:94;:::o;331:92::-;384:7;407:10;400:17;;331:92;:::o;25389:339::-;25515:1;25498:19;;:5;:19;;;;25490:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;25592:1;25573:21;;:7;:21;;;;25565:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;25672:6;25642:11;:18;25654:5;25642:18;;;;;;;;;;;;;;;:27;25661:7;25642:27;;;;;;;;;;;;;;;:36;;;;25706:7;25690:32;;25699:5;25690:32;;;25715:6;25690:32;;;;;;:::i;:::-;;;;;;;;25389:339;;;:::o;25883:1158::-;25992:9;:17;26002:6;25992:17;;;;;;;;;;;;;;;;;;;;;;;;;25988:100;;;26043:12;;26028;:27;26020:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;25988:100;26122:1;26104:20;;:6;:20;;;;26096:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;26202:1;26181:23;;:9;:23;;;;26173:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;26268:1;26259:6;:10;26251:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;26338:7;:5;:7::i;:::-;26328:17;;:6;:17;;;;:41;;;;;26362:7;:5;:7::i;:::-;26349:20;;:9;:20;;;;26328:41;26324:156;;;17255:1;17411:18;;17407:2;:22;;;;:::i;:::-;18151:4;:21;;;;:::i;:::-;26396:6;:22;;26378:102;;;;;;;;;;;;:::i;:::-;;;;;;;;;26324:156;26493:11;:19;26505:6;26493:19;;;;;;;;;;;;;;;;;;;;;;;;;:46;;;;;26517:11;:22;26529:9;26517:22;;;;;;;;;;;;;;;;;;;;;;;;;26516:23;26493:46;26489:547;;;26550:48;26572:6;26580:9;26591:6;26550:21;:48::i;:::-;26489:547;;;26617:11;:19;26629:6;26617:19;;;;;;;;;;;;;;;;;;;;;;;;;26616:20;:46;;;;;26640:11;:22;26652:9;26640:22;;;;;;;;;;;;;;;;;;;;;;;;;26616:46;26612:424;;;26673:46;26693:6;26701:9;26712:6;26673:19;:46::i;:::-;26612:424;;;26738:11;:19;26750:6;26738:19;;;;;;;;;;;;;;;;;;;;;;;;;26737:20;:47;;;;;26762:11;:22;26774:9;26762:22;;;;;;;;;;;;;;;;;;;;;;;;;26761:23;26737:47;26733:303;;;26795:44;26813:6;26821:9;26832:6;26795:17;:44::i;:::-;26733:303;;;26857:11;:19;26869:6;26857:19;;;;;;;;;;;;;;;;;;;;;;;;;:45;;;;;26880:11;:22;26892:9;26880:22;;;;;;;;;;;;;;;;;;;;;;;;;26857:45;26853:183;;;26913:48;26935:6;26943:9;26954:6;26913:21;:48::i;:::-;26853:183;;;26984:44;27002:6;27010:9;27021:6;26984:17;:44::i;:::-;26853:183;26733:303;26612:424;26489:547;25883:1158;;;:::o;4942:198::-;5048:7;5077:1;5072;:6;;5080:12;5064:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;5100:9;5116:1;5112;:5;;;;:::i;:::-;5100:17;;5133:1;5126:8;;;4942:198;;;;;:::o;20184:154::-;20226:7;20243:15;20260;20279:19;:17;:19::i;:::-;20242:56;;;;20312:20;20324:7;20312;:11;;:20;;;;:::i;:::-;20305:27;;;;20184:154;:::o;6258:126::-;6316:7;6339:39;6343:1;6346;6339:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;6332:46;;6258:126;;;;:::o;4103:167::-;4161:7;4177:9;4193:1;4189;:5;;;;:::i;:::-;4177:17;;4214:1;4209;:6;;4201:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;4263:1;4256:8;;;4103:167;;;;:::o;31613:352::-;31687:19;;:::i;:::-;31718:32;31753:87;31773:7;18011:3;18056;18101;31753:11;:87::i;:::-;31718:122;;31847:19;31869:10;:8;:10::i;:::-;31847:32;;31886:47;31898:7;31907:12;31921:11;31886;:47::i;:::-;;31947:12;31940:19;;;;31613:352;;;:::o;28969:658::-;29087:19;29109:10;:8;:10::i;:::-;29087:32;;29126;29161:19;29172:7;29161:10;:19::i;:::-;29126:54;;29187:13;29203:35;29226:11;29203:12;:18;;;:22;;:35;;;;:::i;:::-;29187:51;;29269:45;29295:12;:18;;;29269:7;:21;29277:12;;;;;;;;;;;29269:21;;;;;;;;;;;;;;;;:25;;:45;;;;:::i;:::-;29245:7;:21;29253:12;;;;;;;;;;;29245:21;;;;;;;;;;;;;;;:69;;;;29339:28;29359:7;29339;:15;29347:6;29339:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;29321:7;:15;29329:6;29321:15;;;;;;;;;;;;;;;:46;;;;29392:41;29412:12;:20;;;29392:7;:15;29400:6;29392:15;;;;;;;;;;;;;;;;:19;;:41;;;;:::i;:::-;29374:7;:15;29382:6;29374:15;;;;;;;;;;;;;;;:59;;;;29461:52;29484:12;:28;;;29461:7;:18;29469:9;29461:18;;;;;;;;;;;;;;;;:22;;:52;;;;:::i;:::-;29440:7;:18;29448:9;29440:18;;;;;;;;;;;;;;;:73;;;;29520:32;29532:5;29539:12;29520:11;:32::i;:::-;29581:9;29564:57;;29573:6;29564:57;;;29592:12;:28;;;29564:57;;;;;;:::i;:::-;;;;;;;;29080:547;;;28969:658;;;:::o;28206:683::-;28322:19;28344:10;:8;:10::i;:::-;28322:32;;28361;28396:19;28407:7;28396:10;:19::i;:::-;28361:54;;28422:13;28438:35;28461:11;28438:12;:18;;;:22;;:35;;;;:::i;:::-;28422:51;;28504:45;28530:12;:18;;;28504:7;:21;28512:12;;;;;;;;;;;28504:21;;;;;;;;;;;;;;;;:25;;:45;;;;:::i;:::-;28480:7;:21;28488:12;;;;;;;;;;;28480:21;;;;;;;;;;;;;;;:69;;;;28574:41;28594:12;:20;;;28574:7;:15;28582:6;28574:15;;;;;;;;;;;;;;;;:19;;:41;;;;:::i;:::-;28556:7;:15;28564:6;28556:15;;;;;;;;;;;;;;;:59;;;;28643:52;28666:12;:28;;;28643:7;:18;28651:9;28643:18;;;;;;;;;;;;;;;;:22;;:52;;;;:::i;:::-;28622:7;:18;28630:9;28622:18;;;;;;;;;;;;;;;:73;;;;28723:52;28746:12;:28;;;28723:7;:18;28731:9;28723:18;;;;;;;;;;;;;;;;:22;;:52;;;;:::i;:::-;28702:7;:18;28710:9;28702:18;;;;;;;;;;;;;;;:73;;;;28782:32;28794:5;28801:12;28782:11;:32::i;:::-;28843:9;28826:57;;28835:6;28826:57;;;28854:12;:28;;;28826:57;;;;;;:::i;:::-;;;;;;;;28315:574;;;28206:683;;;:::o;30525:601::-;30639:19;30661:10;:8;:10::i;:::-;30639:32;;30678;30713:19;30724:7;30713:10;:19::i;:::-;30678:54;;30739:13;30755:35;30778:11;30755:12;:18;;;:22;;:35;;;;:::i;:::-;30739:51;;30821:45;30847:12;:18;;;30821:7;:21;30829:12;;;;;;;;;;;30821:21;;;;;;;;;;;;;;;;:25;;:45;;;;:::i;:::-;30797:7;:21;30805:12;;;;;;;;;;;30797:21;;;;;;;;;;;;;;;:69;;;;30891:41;30911:12;:20;;;30891:7;:15;30899:6;30891:15;;;;;;;;;;;;;;;;:19;;:41;;;;:::i;:::-;30873:7;:15;30881:6;30873:15;;;;;;;;;;;;;;;:59;;;;30960:52;30983:12;:28;;;30960:7;:18;30968:9;30960:18;;;;;;;;;;;;;;;;:22;;:52;;;;:::i;:::-;30939:7;:18;30947:9;30939:18;;;;;;;;;;;;;;;:73;;;;31019:32;31031:5;31038:12;31019:11;:32::i;:::-;31080:9;31063:57;;31072:6;31063:57;;;31091:12;:28;;;31063:57;;;;;;:::i;:::-;;;;;;;;30632:494;;;30525:601;;;:::o;29709:738::-;29827:19;29849:10;:8;:10::i;:::-;29827:32;;29866;29901:19;29912:7;29901:10;:19::i;:::-;29866:54;;29927:13;29943:35;29966:11;29943:12;:18;;;:22;;:35;;;;:::i;:::-;29927:51;;30009:45;30035:12;:18;;;30009:7;:21;30017:12;;;;;;;;;;;30009:21;;;;;;;;;;;;;;;;:25;;:45;;;;:::i;:::-;29985:7;:21;29993:12;;;;;;;;;;;29985:21;;;;;;;;;;;;;;;:69;;;;30079:28;30099:7;30079;:15;30087:6;30079:15;;;;;;;;;;;;;;;;:19;;:28;;;;:::i;:::-;30061:7;:15;30069:6;30061:15;;;;;;;;;;;;;;;:46;;;;30132:41;30152:12;:20;;;30132:7;:15;30140:6;30132:15;;;;;;;;;;;;;;;;:19;;:41;;;;:::i;:::-;30114:7;:15;30122:6;30114:15;;;;;;;;;;;;;;;:59;;;;30201:52;30224:12;:28;;;30201:7;:18;30209:9;30201:18;;;;;;;;;;;;;;;;:22;;:52;;;;:::i;:::-;30180:7;:18;30188:9;30180:18;;;;;;;;;;;;;;;:73;;;;30281:52;30304:12;:28;;;30281:7;:18;30289:9;30281:18;;;;;;;;;;;;;;;;:22;;:52;;;;:::i;:::-;30260:7;:18;30268:9;30260:18;;;;;;;;;;;;;;;:73;;;;30340:32;30352:5;30359:12;30340:11;:32::i;:::-;30401:9;30384:57;;30393:6;30384:57;;;30412:12;:28;;;30384:57;;;;;;:::i;:::-;;;;;;;;29820:627;;;29709:738;;;:::o;20466:521::-;20517:7;20526;20542:15;20560:7;;20542:25;;20574:15;20592:7;;20574:25;;20611:9;20606:276;20630:9;:16;;;;20626:1;:20;20606:276;;;20690:7;20666;:21;20674:9;20684:1;20674:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;20666:21;;;;;;;;;;;;;;;;:31;:66;;;;20725:7;20701;:21;20709:9;20719:1;20709:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;20701:21;;;;;;;;;;;;;;;;:31;20666:66;20662:106;;;20751:7;;20760;;20743:25;;;;;;;;;20662:106;20787:34;20799:7;:21;20807:9;20817:1;20807:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;20799:21;;;;;;;;;;;;;;;;20787:7;:11;;:34;;;;:::i;:::-;20777:44;;20840:34;20852:7;:21;20860:9;20870:1;20860:12;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;20852:21;;;;;;;;;;;;;;;;20840:7;:11;;:34;;;;:::i;:::-;20830:44;;20648:3;;;;;:::i;:::-;;;;20606:276;;;;20902:20;20914:7;;20902;;:11;;:20;;;;:::i;:::-;20892:7;:30;20888:61;;;20932:7;;20941;;20924:25;;;;;;;;20888:61;20964:7;20973;20956:25;;;;;;20466:521;;;:::o;6854:280::-;6960:7;6988:1;6984;:5;6991:12;6976:28;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;7011:9;7027:1;7023;:5;;;;:::i;:::-;7011:17;;7127:1;7120:8;;;6854:280;;;;;:::o;32045:775::-;32180:19;;:::i;:::-;32208:12;32223:13;;;;;;;;;;;:84;;32306:1;32223:84;;;32246:50;32292:3;32247:39;17492:3;32248:19;32260:6;32248:7;:11;;:19;;;;:::i;:::-;32247:25;;:39;;;;:::i;:::-;32246:45;;:50;;;;:::i;:::-;32223:84;32208:99;;32336:13;32352:14;;;;;;;;;;;:86;;32437:1;32352:86;;;32376:51;32423:3;32377:40;17492:3;32378:20;32390:7;32378;:11;;:20;;;;:::i;:::-;32377:26;;:40;;;;:::i;:::-;32376:46;;:51;;;;:::i;:::-;32352:86;32336:102;;32445:13;32461:17;;;;;;;;;;;:89;;32549:1;32461:89;;;32488:51;32535:3;32489:40;17492:3;32490:20;32502:7;32490;:11;;:20;;;;:::i;:::-;32489:26;;:40;;;;:::i;:::-;32488:46;;:51;;;;:::i;:::-;32461:89;32445:105;;32557:23;32583:39;32616:5;32583:28;32605:5;32583:17;32595:4;32583:7;:11;;:17;;;;:::i;:::-;:21;;:28;;;;:::i;:::-;:32;;:39;;;;:::i;:::-;32557:65;;32629:32;32664:124;;;;;;;;32685:1;32664:124;;;;32695:1;32664:124;;;;32705:1;32664:124;;;;32715:15;32664:124;;;;32739:4;32664:124;;;;32752:5;32664:124;;;;32766:1;32664:124;;;;32776:5;32664:124;;;32629:159;;32802:12;32795:19;;;;;;;32045:775;;;;;;:::o;32906:564::-;33041:19;;:::i;:::-;33092:24;33104:11;33092:7;:11;;:24;;;;:::i;:::-;33069:12;:20;;:47;;;;;33143:34;33165:11;33143:12;:17;;;:21;;:34;;;;:::i;:::-;33123:12;:17;;:54;;;;;33184:13;33200:35;33223:11;33200:12;:18;;;:22;;:35;;;;:::i;:::-;33184:51;;33263:35;33286:11;33263:12;:18;;;:22;;:35;;;;:::i;:::-;33242:12;:18;;:56;;;;;33336:102;33419:12;:18;;;33336:72;33402:5;33336:55;33373:12;:17;;;33336:12;:26;;;:36;;:55;;;;:::i;:::-;:65;;:72;;;;:::i;:::-;:82;;:102;;;;:::i;:::-;33305:12;:28;;:133;;;;;33452:12;33445:19;;;32906:564;;;;;:::o;5377:431::-;5435:7;5669:1;5664;:6;5660:37;;;5688:1;5681:8;;;;5660:37;5705:9;5721:1;5717;:5;;;;:::i;:::-;5705:17;;5746:1;5741;5737;:5;;;;:::i;:::-;:10;5729:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;5801:1;5794:8;;;5377:431;;;;;:::o;4531:130::-;4589:7;4612:43;4616:1;4619;4612:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;4605:50;;4531:130;;;;:::o;31215:307::-;31318:41;31353:5;31318:30;31330:12;:17;;;31318:7;;:11;;:30;;;;:::i;:::-;:34;;:41;;;;:::i;:::-;31308:7;:51;;;;31379:33;31394:12;:17;;;31379:10;;:14;;:33;;;;:::i;:::-;31366:10;:46;;;;31433:35;31449:12;:18;;;31433:11;;:15;;:35;;;;:::i;:::-;31419:11;:49;;;;31485:31;31497:12;:18;;;31485:7;;:11;;:31;;;;:::i;:::-;31475:7;:41;;;;31215:307;;:::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;7:139:1:-;53:5;91:6;78:20;69:29;;107:33;134:5;107:33;:::i;:::-;59:87;;;;:::o;152:133::-;195:5;233:6;220:20;211:29;;249:30;273:5;249:30;:::i;:::-;201:84;;;;:::o;291:139::-;337:5;375:6;362:20;353:29;;391:33;418:5;391:33;:::i;:::-;343:87;;;;:::o;436:329::-;495:6;544:2;532:9;523:7;519:23;515:32;512:2;;;550:79;;:::i;:::-;512:2;670:1;695:53;740:7;731:6;720:9;716:22;695:53;:::i;:::-;685:63;;641:117;502:263;;;;:::o;771:474::-;839:6;847;896:2;884:9;875:7;871:23;867:32;864:2;;;902:79;;:::i;:::-;864:2;1022:1;1047:53;1092:7;1083:6;1072:9;1068:22;1047:53;:::i;:::-;1037:63;;993:117;1149:2;1175:53;1220:7;1211:6;1200:9;1196:22;1175:53;:::i;:::-;1165:63;;1120:118;854:391;;;;;:::o;1251:619::-;1328:6;1336;1344;1393:2;1381:9;1372:7;1368:23;1364:32;1361:2;;;1399:79;;:::i;:::-;1361:2;1519:1;1544:53;1589:7;1580:6;1569:9;1565:22;1544:53;:::i;:::-;1534:63;;1490:117;1646:2;1672:53;1717:7;1708:6;1697:9;1693:22;1672:53;:::i;:::-;1662:63;;1617:118;1774:2;1800:53;1845:7;1836:6;1825:9;1821:22;1800:53;:::i;:::-;1790:63;;1745:118;1351:519;;;;;:::o;1876:474::-;1944:6;1952;2001:2;1989:9;1980:7;1976:23;1972:32;1969:2;;;2007:79;;:::i;:::-;1969:2;2127:1;2152:53;2197:7;2188:6;2177:9;2173:22;2152:53;:::i;:::-;2142:63;;2098:117;2254:2;2280:53;2325:7;2316:6;2305:9;2301:22;2280:53;:::i;:::-;2270:63;;2225:118;1959:391;;;;;:::o;2356:323::-;2412:6;2461:2;2449:9;2440:7;2436:23;2432:32;2429:2;;;2467:79;;:::i;:::-;2429:2;2587:1;2612:50;2654:7;2645:6;2634:9;2630:22;2612:50;:::i;:::-;2602:60;;2558:114;2419:260;;;;:::o;2685:329::-;2744:6;2793:2;2781:9;2772:7;2768:23;2764:32;2761:2;;;2799:79;;:::i;:::-;2761:2;2919:1;2944:53;2989:7;2980:6;2969:9;2965:22;2944:53;:::i;:::-;2934:63;;2890:117;2751:263;;;;:::o;3020:468::-;3085:6;3093;3142:2;3130:9;3121:7;3117:23;3113:32;3110:2;;;3148:79;;:::i;:::-;3110:2;3268:1;3293:53;3338:7;3329:6;3318:9;3314:22;3293:53;:::i;:::-;3283:63;;3239:117;3395:2;3421:50;3463:7;3454:6;3443:9;3439:22;3421:50;:::i;:::-;3411:60;;3366:115;3100:388;;;;;:::o;3494:179::-;3563:10;3584:46;3626:3;3618:6;3584:46;:::i;:::-;3662:4;3657:3;3653:14;3639:28;;3574:99;;;;:::o;3679:108::-;3756:24;3774:5;3756:24;:::i;:::-;3751:3;3744:37;3734:53;;:::o;3793:118::-;3880:24;3898:5;3880:24;:::i;:::-;3875:3;3868:37;3858:53;;:::o;3947:732::-;4066:3;4095:54;4143:5;4095:54;:::i;:::-;4165:86;4244:6;4239:3;4165:86;:::i;:::-;4158:93;;4275:56;4325:5;4275:56;:::i;:::-;4354:7;4385:1;4370:284;4395:6;4392:1;4389:13;4370:284;;;4471:6;4465:13;4498:63;4557:3;4542:13;4498:63;:::i;:::-;4491:70;;4584:60;4637:6;4584:60;:::i;:::-;4574:70;;4430:224;4417:1;4414;4410:9;4405:14;;4370:284;;;4374:14;4670:3;4663:10;;4071:608;;;;;;;:::o;4685:109::-;4766:21;4781:5;4766:21;:::i;:::-;4761:3;4754:34;4744:50;;:::o;4800:364::-;4888:3;4916:39;4949:5;4916:39;:::i;:::-;4971:71;5035:6;5030:3;4971:71;:::i;:::-;4964:78;;5051:52;5096:6;5091:3;5084:4;5077:5;5073:16;5051:52;:::i;:::-;5128:29;5150:6;5128:29;:::i;:::-;5123:3;5119:39;5112:46;;4892:272;;;;;:::o;5170:366::-;5312:3;5333:67;5397:2;5392:3;5333:67;:::i;:::-;5326:74;;5409:93;5498:3;5409:93;:::i;:::-;5527:2;5522:3;5518:12;5511:19;;5316:220;;;:::o;5542:366::-;5684:3;5705:67;5769:2;5764:3;5705:67;:::i;:::-;5698:74;;5781:93;5870:3;5781:93;:::i;:::-;5899:2;5894:3;5890:12;5883:19;;5688:220;;;:::o;5914:366::-;6056:3;6077:67;6141:2;6136:3;6077:67;:::i;:::-;6070:74;;6153:93;6242:3;6153:93;:::i;:::-;6271:2;6266:3;6262:12;6255:19;;6060:220;;;:::o;6286:366::-;6428:3;6449:67;6513:2;6508:3;6449:67;:::i;:::-;6442:74;;6525:93;6614:3;6525:93;:::i;:::-;6643:2;6638:3;6634:12;6627:19;;6432:220;;;:::o;6658:366::-;6800:3;6821:67;6885:2;6880:3;6821:67;:::i;:::-;6814:74;;6897:93;6986:3;6897:93;:::i;:::-;7015:2;7010:3;7006:12;6999:19;;6804:220;;;:::o;7030:366::-;7172:3;7193:67;7257:2;7252:3;7193:67;:::i;:::-;7186:74;;7269:93;7358:3;7269:93;:::i;:::-;7387:2;7382:3;7378:12;7371:19;;7176:220;;;:::o;7402:366::-;7544:3;7565:67;7629:2;7624:3;7565:67;:::i;:::-;7558:74;;7641:93;7730:3;7641:93;:::i;:::-;7759:2;7754:3;7750:12;7743:19;;7548:220;;;:::o;7774:366::-;7916:3;7937:67;8001:2;7996:3;7937:67;:::i;:::-;7930:74;;8013:93;8102:3;8013:93;:::i;:::-;8131:2;8126:3;8122:12;8115:19;;7920:220;;;:::o;8146:366::-;8288:3;8309:67;8373:2;8368:3;8309:67;:::i;:::-;8302:74;;8385:93;8474:3;8385:93;:::i;:::-;8503:2;8498:3;8494:12;8487:19;;8292:220;;;:::o;8518:366::-;8660:3;8681:67;8745:2;8740:3;8681:67;:::i;:::-;8674:74;;8757:93;8846:3;8757:93;:::i;:::-;8875:2;8870:3;8866:12;8859:19;;8664:220;;;:::o;8890:366::-;9032:3;9053:67;9117:2;9112:3;9053:67;:::i;:::-;9046:74;;9129:93;9218:3;9129:93;:::i;:::-;9247:2;9242:3;9238:12;9231:19;;9036:220;;;:::o;9262:366::-;9404:3;9425:67;9489:2;9484:3;9425:67;:::i;:::-;9418:74;;9501:93;9590:3;9501:93;:::i;:::-;9619:2;9614:3;9610:12;9603:19;;9408:220;;;:::o;9634:366::-;9776:3;9797:67;9861:2;9856:3;9797:67;:::i;:::-;9790:74;;9873:93;9962:3;9873:93;:::i;:::-;9991:2;9986:3;9982:12;9975:19;;9780:220;;;:::o;10006:366::-;10148:3;10169:67;10233:2;10228:3;10169:67;:::i;:::-;10162:74;;10245:93;10334:3;10245:93;:::i;:::-;10363:2;10358:3;10354:12;10347:19;;10152:220;;;:::o;10378:366::-;10520:3;10541:67;10605:2;10600:3;10541:67;:::i;:::-;10534:74;;10617:93;10706:3;10617:93;:::i;:::-;10735:2;10730:3;10726:12;10719:19;;10524:220;;;:::o;10750:366::-;10892:3;10913:67;10977:2;10972:3;10913:67;:::i;:::-;10906:74;;10989:93;11078:3;10989:93;:::i;:::-;11107:2;11102:3;11098:12;11091:19;;10896:220;;;:::o;11122:366::-;11264:3;11285:67;11349:2;11344:3;11285:67;:::i;:::-;11278:74;;11361:93;11450:3;11361:93;:::i;:::-;11479:2;11474:3;11470:12;11463:19;;11268:220;;;:::o;11494:118::-;11581:24;11599:5;11581:24;:::i;:::-;11576:3;11569:37;11559:53;;:::o;11618:112::-;11701:22;11717:5;11701:22;:::i;:::-;11696:3;11689:35;11679:51;;:::o;11736:222::-;11829:4;11867:2;11856:9;11852:18;11844:26;;11880:71;11948:1;11937:9;11933:17;11924:6;11880:71;:::i;:::-;11834:124;;;;:::o;11964:373::-;12107:4;12145:2;12134:9;12130:18;12122:26;;12194:9;12188:4;12184:20;12180:1;12169:9;12165:17;12158:47;12222:108;12325:4;12316:6;12222:108;:::i;:::-;12214:116;;12112:225;;;;:::o;12343:210::-;12430:4;12468:2;12457:9;12453:18;12445:26;;12481:65;12543:1;12532:9;12528:17;12519:6;12481:65;:::i;:::-;12435:118;;;;:::o;12559:313::-;12672:4;12710:2;12699:9;12695:18;12687:26;;12759:9;12753:4;12749:20;12745:1;12734:9;12730:17;12723:47;12787:78;12860:4;12851:6;12787:78;:::i;:::-;12779:86;;12677:195;;;;:::o;12878:419::-;13044:4;13082:2;13071:9;13067:18;13059:26;;13131:9;13125:4;13121:20;13117:1;13106:9;13102:17;13095:47;13159:131;13285:4;13159:131;:::i;:::-;13151:139;;13049:248;;;:::o;13303:419::-;13469:4;13507:2;13496:9;13492:18;13484:26;;13556:9;13550:4;13546:20;13542:1;13531:9;13527:17;13520:47;13584:131;13710:4;13584:131;:::i;:::-;13576:139;;13474:248;;;:::o;13728:419::-;13894:4;13932:2;13921:9;13917:18;13909:26;;13981:9;13975:4;13971:20;13967:1;13956:9;13952:17;13945:47;14009:131;14135:4;14009:131;:::i;:::-;14001:139;;13899:248;;;:::o;14153:419::-;14319:4;14357:2;14346:9;14342:18;14334:26;;14406:9;14400:4;14396:20;14392:1;14381:9;14377:17;14370:47;14434:131;14560:4;14434:131;:::i;:::-;14426:139;;14324:248;;;:::o;14578:419::-;14744:4;14782:2;14771:9;14767:18;14759:26;;14831:9;14825:4;14821:20;14817:1;14806:9;14802:17;14795:47;14859:131;14985:4;14859:131;:::i;:::-;14851:139;;14749:248;;;:::o;15003:419::-;15169:4;15207:2;15196:9;15192:18;15184:26;;15256:9;15250:4;15246:20;15242:1;15231:9;15227:17;15220:47;15284:131;15410:4;15284:131;:::i;:::-;15276:139;;15174:248;;;:::o;15428:419::-;15594:4;15632:2;15621:9;15617:18;15609:26;;15681:9;15675:4;15671:20;15667:1;15656:9;15652:17;15645:47;15709:131;15835:4;15709:131;:::i;:::-;15701:139;;15599:248;;;:::o;15853:419::-;16019:4;16057:2;16046:9;16042:18;16034:26;;16106:9;16100:4;16096:20;16092:1;16081:9;16077:17;16070:47;16134:131;16260:4;16134:131;:::i;:::-;16126:139;;16024:248;;;:::o;16278:419::-;16444:4;16482:2;16471:9;16467:18;16459:26;;16531:9;16525:4;16521:20;16517:1;16506:9;16502:17;16495:47;16559:131;16685:4;16559:131;:::i;:::-;16551:139;;16449:248;;;:::o;16703:419::-;16869:4;16907:2;16896:9;16892:18;16884:26;;16956:9;16950:4;16946:20;16942:1;16931:9;16927:17;16920:47;16984:131;17110:4;16984:131;:::i;:::-;16976:139;;16874:248;;;:::o;17128:419::-;17294:4;17332:2;17321:9;17317:18;17309:26;;17381:9;17375:4;17371:20;17367:1;17356:9;17352:17;17345:47;17409:131;17535:4;17409:131;:::i;:::-;17401:139;;17299:248;;;:::o;17553:419::-;17719:4;17757:2;17746:9;17742:18;17734:26;;17806:9;17800:4;17796:20;17792:1;17781:9;17777:17;17770:47;17834:131;17960:4;17834:131;:::i;:::-;17826:139;;17724:248;;;:::o;17978:419::-;18144:4;18182:2;18171:9;18167:18;18159:26;;18231:9;18225:4;18221:20;18217:1;18206:9;18202:17;18195:47;18259:131;18385:4;18259:131;:::i;:::-;18251:139;;18149:248;;;:::o;18403:419::-;18569:4;18607:2;18596:9;18592:18;18584:26;;18656:9;18650:4;18646:20;18642:1;18631:9;18627:17;18620:47;18684:131;18810:4;18684:131;:::i;:::-;18676:139;;18574:248;;;:::o;18828:419::-;18994:4;19032:2;19021:9;19017:18;19009:26;;19081:9;19075:4;19071:20;19067:1;19056:9;19052:17;19045:47;19109:131;19235:4;19109:131;:::i;:::-;19101:139;;18999:248;;;:::o;19253:419::-;19419:4;19457:2;19446:9;19442:18;19434:26;;19506:9;19500:4;19496:20;19492:1;19481:9;19477:17;19470:47;19534:131;19660:4;19534:131;:::i;:::-;19526:139;;19424:248;;;:::o;19678:419::-;19844:4;19882:2;19871:9;19867:18;19859:26;;19931:9;19925:4;19921:20;19917:1;19906:9;19902:17;19895:47;19959:131;20085:4;19959:131;:::i;:::-;19951:139;;19849:248;;;:::o;20103:222::-;20196:4;20234:2;20223:9;20219:18;20211:26;;20247:71;20315:1;20304:9;20300:17;20291:6;20247:71;:::i;:::-;20201:124;;;;:::o;20331:214::-;20420:4;20458:2;20447:9;20443:18;20435:26;;20471:67;20535:1;20524:9;20520:17;20511:6;20471:67;:::i;:::-;20425:120;;;;:::o;20632:132::-;20699:4;20722:3;20714:11;;20752:4;20747:3;20743:14;20735:22;;20704:60;;;:::o;20770:114::-;20837:6;20871:5;20865:12;20855:22;;20844:40;;;:::o;20890:99::-;20942:6;20976:5;20970:12;20960:22;;20949:40;;;:::o;20995:113::-;21065:4;21097;21092:3;21088:14;21080:22;;21070:38;;;:::o;21114:184::-;21213:11;21247:6;21242:3;21235:19;21287:4;21282:3;21278:14;21263:29;;21225:73;;;;:::o;21304:169::-;21388:11;21422:6;21417:3;21410:19;21462:4;21457:3;21453:14;21438:29;;21400:73;;;;:::o;21479:305::-;21519:3;21538:20;21556:1;21538:20;:::i;:::-;21533:25;;21572:20;21590:1;21572:20;:::i;:::-;21567:25;;21726:1;21658:66;21654:74;21651:1;21648:81;21645:2;;;21732:18;;:::i;:::-;21645:2;21776:1;21773;21769:9;21762:16;;21523:261;;;;:::o;21790:185::-;21830:1;21847:20;21865:1;21847:20;:::i;:::-;21842:25;;21881:20;21899:1;21881:20;:::i;:::-;21876:25;;21920:1;21910:2;;21925:18;;:::i;:::-;21910:2;21967:1;21964;21960:9;21955:14;;21832:143;;;;:::o;21981:848::-;22042:5;22049:4;22073:6;22064:15;;22097:5;22088:14;;22111:712;22132:1;22122:8;22119:15;22111:712;;;22227:4;22222:3;22218:14;22212:4;22209:24;22206:2;;;22236:18;;:::i;:::-;22206:2;22286:1;22276:8;22272:16;22269:2;;;22701:4;22694:5;22690:16;22681:25;;22269:2;22751:4;22745;22741:15;22733:23;;22781:32;22804:8;22781:32;:::i;:::-;22769:44;;22111:712;;;22054:775;;;;;;;:::o;22835:285::-;22895:5;22919:23;22937:4;22919:23;:::i;:::-;22911:31;;22963:27;22981:8;22963:27;:::i;:::-;22951:39;;23009:104;23046:66;23036:8;23030:4;23009:104;:::i;:::-;23000:113;;22901:219;;;;:::o;23126:1073::-;23180:5;23371:8;23361:2;;23392:1;23383:10;;23394:5;;23361:2;23420:4;23410:2;;23437:1;23428:10;;23439:5;;23410:2;23506:4;23554:1;23549:27;;;;23590:1;23585:191;;;;23499:277;;23549:27;23567:1;23558:10;;23569:5;;;23585:191;23630:3;23620:8;23617:17;23614:2;;;23637:18;;:::i;:::-;23614:2;23686:8;23683:1;23679:16;23670:25;;23721:3;23714:5;23711:14;23708:2;;;23728:18;;:::i;:::-;23708:2;23761:5;;;23499:277;;23885:2;23875:8;23872:16;23866:3;23860:4;23857:13;23853:36;23835:2;23825:8;23822:16;23817:2;23811:4;23808:12;23804:35;23788:111;23785:2;;;23941:8;23935:4;23931:19;23922:28;;23976:3;23969:5;23966:14;23963:2;;;23983:18;;:::i;:::-;23963:2;24016:5;;23785:2;24056:42;24094:3;24084:8;24078:4;24075:1;24056:42;:::i;:::-;24041:57;;;;24130:4;24125:3;24121:14;24114:5;24111:25;24108:2;;;24139:18;;:::i;:::-;24108:2;24188:4;24181:5;24177:16;24168:25;;23186:1013;;;;;;:::o;24205:348::-;24245:7;24268:20;24286:1;24268:20;:::i;:::-;24263:25;;24302:20;24320:1;24302:20;:::i;:::-;24297:25;;24490:1;24422:66;24418:74;24415:1;24412:81;24407:1;24400:9;24393:17;24389:105;24386:2;;;24497:18;;:::i;:::-;24386:2;24545:1;24542;24538:9;24527:20;;24253:300;;;;:::o;24559:191::-;24599:4;24619:20;24637:1;24619:20;:::i;:::-;24614:25;;24653:20;24671:1;24653:20;:::i;:::-;24648:25;;24692:1;24689;24686:8;24683:2;;;24697:18;;:::i;:::-;24683:2;24742:1;24739;24735:9;24727:17;;24604:146;;;;:::o;24756:96::-;24793:7;24822:24;24840:5;24822:24;:::i;:::-;24811:35;;24801:51;;;:::o;24858:90::-;24892:7;24935:5;24928:13;24921:21;24910:32;;24900:48;;;:::o;24954:126::-;24991:7;25031:42;25024:5;25020:54;25009:65;;24999:81;;;:::o;25086:77::-;25123:7;25152:5;25141:16;;25131:32;;;:::o;25169:86::-;25204:7;25244:4;25237:5;25233:16;25222:27;;25212:43;;;:::o;25261:307::-;25329:1;25339:113;25353:6;25350:1;25347:13;25339:113;;;25438:1;25433:3;25429:11;25423:18;25419:1;25414:3;25410:11;25403:39;25375:2;25372:1;25368:10;25363:15;;25339:113;;;25470:6;25467:1;25464:13;25461:2;;;25550:1;25541:6;25536:3;25532:16;25525:27;25461:2;25310:258;;;;:::o;25574:233::-;25613:3;25636:24;25654:5;25636:24;:::i;:::-;25627:33;;25682:66;25675:5;25672:77;25669:2;;;25752:18;;:::i;:::-;25669:2;25799:1;25792:5;25788:13;25781:20;;25617:190;;;:::o;25813:180::-;25861:77;25858:1;25851:88;25958:4;25955:1;25948:15;25982:4;25979:1;25972:15;25999:180;26047:77;26044:1;26037:88;26144:4;26141:1;26134:15;26168:4;26165:1;26158:15;26185:180;26233:77;26230:1;26223:88;26330:4;26327:1;26320:15;26354:4;26351:1;26344:15;26371:180;26419:77;26416:1;26409:88;26516:4;26513:1;26506:15;26540:4;26537:1;26530:15;26680:117;26789:1;26786;26779:12;26803:102;26844:6;26895:2;26891:7;26886:2;26879:5;26875:14;26871:28;26861:38;;26851:54;;;:::o;26911:102::-;26953:8;27000:5;26997:1;26993:13;26972:34;;26962:51;;;:::o;27019:224::-;27159:34;27155:1;27147:6;27143:14;27136:58;27228:7;27223:2;27215:6;27211:15;27204:32;27125:118;:::o;27249:221::-;27389:34;27385:1;27377:6;27373:14;27366:58;27458:4;27453:2;27445:6;27441:15;27434:29;27355:115;:::o;27476:223::-;27616:34;27612:1;27604:6;27600:14;27593:58;27685:6;27680:2;27672:6;27668:15;27661:31;27582:117;:::o;27705:229::-;27845:34;27841:1;27833:6;27829:14;27822:58;27914:12;27909:2;27901:6;27897:15;27890:37;27811:123;:::o;27940:225::-;28080:34;28076:1;28068:6;28064:14;28057:58;28149:8;28144:2;28136:6;28132:15;28125:33;28046:119;:::o;28171:177::-;28311:29;28307:1;28299:6;28295:14;28288:53;28277:71;:::o;28354:177::-;28494:29;28490:1;28482:6;28478:14;28471:53;28460:71;:::o;28537:178::-;28677:30;28673:1;28665:6;28661:14;28654:54;28643:72;:::o;28721:177::-;28861:29;28857:1;28849:6;28845:14;28838:53;28827:71;:::o;28904:181::-;29044:33;29040:1;29032:6;29028:14;29021:57;29010:75;:::o;29091:227::-;29231:34;29227:1;29219:6;29215:14;29208:58;29300:10;29295:2;29287:6;29283:15;29276:35;29197:121;:::o;29324:220::-;29464:34;29460:1;29452:6;29448:14;29441:58;29533:3;29528:2;29520:6;29516:15;29509:28;29430:114;:::o;29550:182::-;29690:34;29686:1;29678:6;29674:14;29667:58;29656:76;:::o;29738:228::-;29878:34;29874:1;29866:6;29862:14;29855:58;29947:11;29942:2;29934:6;29930:15;29923:36;29844:122;:::o;29972:222::-;30112:34;30108:1;30100:6;30096:14;30089:58;30181:5;30176:2;30168:6;30164:15;30157:30;30078:116;:::o;30200:170::-;30340:22;30336:1;30328:6;30324:14;30317:46;30306:64;:::o;30376:221::-;30516:34;30512:1;30504:6;30500:14;30493:58;30585:4;30580:2;30572:6;30568:15;30561:29;30482:115;:::o;30603:122::-;30676:24;30694:5;30676:24;:::i;:::-;30669:5;30666:35;30656:2;;30715:1;30712;30705:12;30656:2;30646:79;:::o;30731:116::-;30801:21;30816:5;30801:21;:::i;:::-;30794:5;30791:32;30781:2;;30837:1;30834;30827:12;30781:2;30771:76;:::o;30853:122::-;30926:24;30944:5;30926:24;:::i;:::-;30919:5;30916:35;30906:2;;30965:1;30962;30955:12;30906:2;30896:79;:::o

Swarm Source

ipfs://e61109971590905530e0cb8f5e544d9c94c1fd65f0cb4be3a21ab346104a8db6
Block Transaction Gas Used Reward
Age Block Fee Address BC Fee Address Voting Power Jailed Incoming
Block Uncle Number Difficulty Gas Used Reward
Loading