ETH Price: $3,452.86 (+3.75%)

Contract

0x93aCe22d25D8479925843eF70a37A064A868Cd64
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
0x60806040115579092020-12-30 21:36:021425 days ago1609364162IN
 Create: ServiceV7
0 ETH0.2882534695

View more zero value Internal Transactions in Advanced View mode

Advanced mode:
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
ServiceV7

Compiler Version
v0.6.12+commit.27d51765

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity Multiple files format)

File 1 of 4: ServiceV7.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.6.12;

import './IERC20.sol';
import './SafeMath.sol';
import './StrongPoolInterface.sol';

contract ServiceV7 {
  event Requested(address indexed miner);
  event Claimed(address indexed miner, uint256 reward);

  using SafeMath for uint256;
  bool public initDone;
  address public admin;
  address public pendingAdmin;
  address public superAdmin;
  address public pendingSuperAdmin;
  address public serviceAdmin;
  address public parameterAdmin;
  address payable public feeCollector;

  IERC20 public strongToken;
  StrongPoolInterface public strongPool;

  uint256 public rewardPerBlockNumerator;
  uint256 public rewardPerBlockDenominator;

  uint256 public naasRewardPerBlockNumerator;
  uint256 public naasRewardPerBlockDenominator;

  uint256 public claimingFeeNumerator;
  uint256 public claimingFeeDenominator;

  uint256 public requestingFeeInWei;

  uint256 public strongFeeInWei;

  uint256 public recurringFeeInWei;
  uint256 public recurringNaaSFeeInWei;
  uint256 public recurringPaymentCycleInBlocks;

  uint256 public rewardBalance;

  mapping(address => uint256) public entityBlockLastClaimedOn;

  address[] public entities;
  mapping(address => uint256) public entityIndex;
  mapping(address => bool) public entityActive;
  mapping(address => bool) public requestPending;
  mapping(address => bool) public entityIsNaaS;
  mapping(address => uint256) public paidOnBlock;
  uint256 public activeEntities;

  string public desciption;

  uint256 public claimingFeeInWei;

  uint256 public naasRequestingFeeInWei;

  uint256 public naasStrongFeeInWei;

  bool public removedTokens;

  mapping(address => uint256) public traunch;

  uint256 public currentTraunch;

  function init(
    address strongTokenAddress,
    address strongPoolAddress,
    address adminAddress,
    address superAdminAddress,
    uint256 rewardPerBlockNumeratorValue,
    uint256 rewardPerBlockDenominatorValue,
    uint256 naasRewardPerBlockNumeratorValue,
    uint256 naasRewardPerBlockDenominatorValue,
    uint256 requestingFeeInWeiValue,
    uint256 strongFeeInWeiValue,
    uint256 recurringFeeInWeiValue,
    uint256 recurringNaaSFeeInWeiValue,
    uint256 recurringPaymentCycleInBlocksValue,
    uint256 claimingFeeNumeratorValue,
    uint256 claimingFeeDenominatorValue,
    string memory desc
  ) public {
    require(!initDone, 'init done');
    strongToken = IERC20(strongTokenAddress);
    strongPool = StrongPoolInterface(strongPoolAddress);
    admin = adminAddress;
    superAdmin = superAdminAddress;
    rewardPerBlockNumerator = rewardPerBlockNumeratorValue;
    rewardPerBlockDenominator = rewardPerBlockDenominatorValue;
    naasRewardPerBlockNumerator = naasRewardPerBlockNumeratorValue;
    naasRewardPerBlockDenominator = naasRewardPerBlockDenominatorValue;
    requestingFeeInWei = requestingFeeInWeiValue;
    strongFeeInWei = strongFeeInWeiValue;
    recurringFeeInWei = recurringFeeInWeiValue;
    recurringNaaSFeeInWei = recurringNaaSFeeInWeiValue;
    claimingFeeNumerator = claimingFeeNumeratorValue;
    claimingFeeDenominator = claimingFeeDenominatorValue;
    recurringPaymentCycleInBlocks = recurringPaymentCycleInBlocksValue;
    desciption = desc;
    initDone = true;
  }

  // ADMIN
  // *************************************************************************************
  function updateServiceAdmin(address newServiceAdmin) public {
    require(msg.sender == superAdmin);
    serviceAdmin = newServiceAdmin;
  }

  function updateParameterAdmin(address newParameterAdmin) public {
    require(newParameterAdmin != address(0), 'zero');
    require(msg.sender == superAdmin);
    parameterAdmin = newParameterAdmin;
  }

  function updateFeeCollector(address payable newFeeCollector) public {
    require(newFeeCollector != address(0), 'zero');
    require(msg.sender == superAdmin);
    feeCollector = newFeeCollector;
  }

  function setPendingAdmin(address newPendingAdmin) public {
    require(msg.sender == admin, 'not admin');
    pendingAdmin = newPendingAdmin;
  }

  function acceptAdmin() public {
    require(msg.sender == pendingAdmin && msg.sender != address(0), 'not pendingAdmin');
    admin = pendingAdmin;
    pendingAdmin = address(0);
  }

  function setPendingSuperAdmin(address newPendingSuperAdmin) public {
    require(msg.sender == superAdmin, 'not superAdmin');
    pendingSuperAdmin = newPendingSuperAdmin;
  }

  function acceptSuperAdmin() public {
    require(msg.sender == pendingSuperAdmin && msg.sender != address(0), 'not pendingSuperAdmin');
    superAdmin = pendingSuperAdmin;
    pendingSuperAdmin = address(0);
  }

  // ENTITIES
  // *************************************************************************************
  function getEntities() public view returns (address[] memory) {
    return entities;
  }

  function isEntityActive(address entity) public view returns (bool) {
    return entityActive[entity];
  }

  // TRAUNCH
  // *************************************************************************************
  function updateCurrentTraunch(uint256 value) public {
    require(msg.sender == admin || msg.sender == parameterAdmin || msg.sender == superAdmin, 'not an admin');
    currentTraunch = value;
  }

  function getTraunch(address entity) public view returns (uint256) {
    return traunch[entity];
  }

  // REWARD
  // *************************************************************************************
  function updateRewardPerBlock(uint256 numerator, uint256 denominator) public {
    require(msg.sender == admin || msg.sender == parameterAdmin || msg.sender == superAdmin, 'not an admin');
    require(denominator != 0, 'invalid value');
    rewardPerBlockNumerator = numerator;
    rewardPerBlockDenominator = denominator;
  }

  function updateNaaSRewardPerBlock(uint256 numerator, uint256 denominator) public {
    require(msg.sender == admin || msg.sender == parameterAdmin || msg.sender == superAdmin, 'not an admin');
    require(denominator != 0, 'invalid value');
    naasRewardPerBlockNumerator = numerator;
    naasRewardPerBlockDenominator = denominator;
  }

  function deposit(uint256 amount) public {
    require(msg.sender == superAdmin, 'not an admin');
    require(amount > 0, 'zero');
    strongToken.transferFrom(msg.sender, address(this), amount);
    rewardBalance = rewardBalance.add(amount);
  }

  function withdraw(address destination, uint256 amount) public {
    require(msg.sender == superAdmin, 'not an admin');
    require(amount > 0, 'zero');
    require(rewardBalance >= amount, 'not enough');
    strongToken.transfer(destination, amount);
    rewardBalance = rewardBalance.sub(amount);
  }

  function removeTokens() public {
    require(!removedTokens, 'already removed');
    require(msg.sender == superAdmin, 'not an admin');
    // removing 2500 STRONG tokens sent in this tx: 0xe27640beda32a5e49aad3b6692790b9d380ed25da0cf8dca7fd5f3258efa600a
    strongToken.transfer(superAdmin, 2500000000000000000000);
    removedTokens = true;
  }

  // FEES
  // *************************************************************************************
  function updateRequestingFee(uint256 feeInWei) public {
    require(msg.sender == admin || msg.sender == parameterAdmin || msg.sender == superAdmin, 'not an admin');
    requestingFeeInWei = feeInWei;
  }

  function updateStrongFee(uint256 feeInWei) public {
    require(msg.sender == admin || msg.sender == parameterAdmin || msg.sender == superAdmin, 'not an admin');
    strongFeeInWei = feeInWei;
  }

  function updateNaasRequestingFee(uint256 feeInWei) public {
    require(msg.sender == admin || msg.sender == parameterAdmin || msg.sender == superAdmin, 'not an admin');
    naasRequestingFeeInWei = feeInWei;
  }

  function updateNaasStrongFee(uint256 feeInWei) public {
    require(msg.sender == admin || msg.sender == parameterAdmin || msg.sender == superAdmin, 'not an admin');
    naasStrongFeeInWei = feeInWei;
  }

  function updateClaimingFee(uint256 numerator, uint256 denominator) public {
    require(msg.sender == admin || msg.sender == parameterAdmin || msg.sender == superAdmin, 'not an admin');
    require(denominator != 0, 'invalid value');
    claimingFeeNumerator = numerator;
    claimingFeeDenominator = denominator;
  }

  function updateRecurringFee(uint256 feeInWei) public {
    require(msg.sender == admin || msg.sender == parameterAdmin || msg.sender == superAdmin, 'not an admin');
    recurringFeeInWei = feeInWei;
  }

  function updateRecurringNaaSFee(uint256 feeInWei) public {
    require(msg.sender == admin || msg.sender == parameterAdmin || msg.sender == superAdmin, 'not an admin');
    recurringNaaSFeeInWei = feeInWei;
  }

  function updateRecurringPaymentCycleInBlocks(uint256 blocks) public {
    require(msg.sender == admin || msg.sender == parameterAdmin || msg.sender == superAdmin, 'not an admin');
    require(blocks > 0, 'zero');
    recurringPaymentCycleInBlocks = blocks;
  }

  // CORE
  // *************************************************************************************
  function requestAccess(bool isNaaS) public payable {
    require(!entityActive[msg.sender], 'active');
    uint256 rFee;
    uint256 sFee;
    if (isNaaS) {
      rFee = naasRequestingFeeInWei;
      sFee = naasStrongFeeInWei;
      uint256 len = entities.length;
      entityIndex[msg.sender] = len;
      entities.push(msg.sender);
      entityActive[msg.sender] = true;
      requestPending[msg.sender] = false;
      activeEntities = activeEntities.add(1);
      entityBlockLastClaimedOn[msg.sender] = block.number;
      paidOnBlock[msg.sender] = block.number;
    } else {
      rFee = requestingFeeInWei;
      sFee = strongFeeInWei;
      requestPending[msg.sender] = true;
    }
    entityIsNaaS[msg.sender] = isNaaS;
    require(msg.value == rFee, 'invalid fee');
    feeCollector.transfer(msg.value);
    strongToken.transferFrom(msg.sender, address(this), sFee);
    strongToken.transfer(feeCollector, sFee);
    traunch[msg.sender] = currentTraunch;
    emit Requested(msg.sender);
  }

  function grantAccess(
    address[] memory ents,
    bool[] memory entIsNaaS,
    bool useChecks
  ) public {
    require(msg.sender == admin || msg.sender == serviceAdmin || msg.sender == superAdmin, 'not admin');
    require(ents.length > 0, 'zero');
    require(ents.length == entIsNaaS.length, 'lengths dont match');
    for (uint256 i = 0; i < ents.length; i++) {
      address entity = ents[i];
      bool naas = entIsNaaS[i];
      if (useChecks) {
        require(requestPending[entity], 'not pending');
        require(entityIsNaaS[entity] == naas, 'naas no match');
      }
      require(!entityActive[entity], 'exists');
      uint256 len = entities.length;
      entityIndex[entity] = len;
      entities.push(entity);
      entityActive[entity] = true;
      requestPending[entity] = false;
      entityIsNaaS[entity] = naas;
      activeEntities = activeEntities.add(1);
      entityBlockLastClaimedOn[entity] = block.number;
      paidOnBlock[entity] = block.number;
      traunch[entity] = currentTraunch;
    }
  }

  function setEntityActiveStatus(address entity, bool status) public {
    require(msg.sender == admin || msg.sender == serviceAdmin || msg.sender == superAdmin, 'not admin');
    uint256 index = entityIndex[entity];
    require(entities[index] == entity, 'invalid entity');
    require(entityActive[entity] != status, 'already set');
    entityActive[entity] = status;
    if (status) {
      activeEntities = activeEntities.add(1);
      entityBlockLastClaimedOn[entity] = block.number;
    } else {
      if (block.number > entityBlockLastClaimedOn[entity]) {
        uint256 reward = getReward(entity);
        if (reward > 0) {
          rewardBalance = rewardBalance.sub(reward);
          strongToken.approve(address(strongPool), reward);
          strongPool.mineFor(entity, reward);
        }
      }
      activeEntities = activeEntities.sub(1);
      entityBlockLastClaimedOn[entity] = 0;
    }
  }

  function payFee() public payable {
    if (entityIsNaaS[msg.sender]) {
      require(msg.value == recurringNaaSFeeInWei, 'naas fee');
    } else {
      require(msg.value == recurringFeeInWei, 'basic fee');
    }
    feeCollector.transfer(msg.value);
    paidOnBlock[msg.sender] = paidOnBlock[msg.sender].add(recurringPaymentCycleInBlocks);
  }

  function getReward(address entity) public view returns (uint256) {
    if (activeEntities == 0) return 0;
    if (entityBlockLastClaimedOn[entity] == 0) return 0;
    uint256 blockResult = block.number.sub(entityBlockLastClaimedOn[entity]);
    uint256 rewardNumerator;
    uint256 rewardDenominator;
    if (entityIsNaaS[entity]) {
      rewardNumerator = naasRewardPerBlockNumerator;
      rewardDenominator = naasRewardPerBlockDenominator;
    } else {
      rewardNumerator = rewardPerBlockNumerator;
      rewardDenominator = rewardPerBlockDenominator;
    }
    uint256 rewardPerBlockResult = blockResult.mul(rewardNumerator).div(rewardDenominator);
    return rewardPerBlockResult.div(activeEntities);
  }

  function getRewardByBlock(address entity, uint256 blockNumber) public view returns (uint256) {
    if (blockNumber > block.number) return 0;
    if (entityBlockLastClaimedOn[entity] == 0) return 0;
    if (blockNumber < entityBlockLastClaimedOn[entity]) return 0;
    if (activeEntities == 0) return 0;
    uint256 blockResult = blockNumber.sub(entityBlockLastClaimedOn[entity]);
    uint256 rewardNumerator;
    uint256 rewardDenominator;
    if (entityIsNaaS[entity]) {
      rewardNumerator = naasRewardPerBlockNumerator;
      rewardDenominator = naasRewardPerBlockDenominator;
    } else {
      rewardNumerator = rewardPerBlockNumerator;
      rewardDenominator = rewardPerBlockDenominator;
    }
    uint256 rewardPerBlockResult = blockResult.mul(rewardNumerator).div(rewardDenominator);
    return rewardPerBlockResult.div(activeEntities);
  }

  function claim(uint256 blockNumber) public payable {
    require(blockNumber <= block.number, 'invalid block number');
    require(entityBlockLastClaimedOn[msg.sender] != 0, 'error');
    require(blockNumber > entityBlockLastClaimedOn[msg.sender], 'too soon');
    require(entityActive[msg.sender], 'not active');
    require(paidOnBlock[msg.sender] != 0, 'zero');
    if (
      (entityIsNaaS[msg.sender] && recurringNaaSFeeInWei != 0) || (!entityIsNaaS[msg.sender] && recurringFeeInWei != 0)
    ) {
      require(blockNumber < paidOnBlock[msg.sender].add(recurringPaymentCycleInBlocks), 'pay fee');
    }

    uint256 reward = getRewardByBlock(msg.sender, blockNumber);
    require(reward > 0, 'no reward');
    uint256 fee = reward.mul(claimingFeeNumerator).div(claimingFeeDenominator);
    require(msg.value == fee, 'invalid fee');
    feeCollector.transfer(msg.value);
    strongToken.approve(address(strongPool), reward);
    strongPool.mineFor(msg.sender, reward);
    rewardBalance = rewardBalance.sub(reward);
    entityBlockLastClaimedOn[msg.sender] = blockNumber;
    emit Claimed(msg.sender, reward);
  }
}

File 2 of 4: IERC20.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.6.0;

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

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

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

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

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

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

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

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

File 3 of 4: SafeMath.sol
// SPDX-License-Identifier: MIT

pragma solidity ^0.6.0;

/**
 * @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;
    }
}

File 4 of 4: StrongPoolInterface.sol
// SPDX-License-Identifier: MIT
pragma solidity ^0.6.12;

interface StrongPoolInterface {
  function mineFor(address miner, uint256 amount) external;
}

Contract Security Audit

Contract ABI

[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"miner","type":"address"},{"indexed":false,"internalType":"uint256","name":"reward","type":"uint256"}],"name":"Claimed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"miner","type":"address"}],"name":"Requested","type":"event"},{"inputs":[],"name":"acceptAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"acceptSuperAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"activeEntities","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"admin","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"blockNumber","type":"uint256"}],"name":"claim","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"claimingFeeDenominator","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"claimingFeeInWei","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"claimingFeeNumerator","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"currentTraunch","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"deposit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"desciption","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"entities","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"entityActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"entityBlockLastClaimedOn","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"entityIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"entityIsNaaS","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"feeCollector","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getEntities","outputs":[{"internalType":"address[]","name":"","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"entity","type":"address"}],"name":"getReward","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"entity","type":"address"},{"internalType":"uint256","name":"blockNumber","type":"uint256"}],"name":"getRewardByBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"entity","type":"address"}],"name":"getTraunch","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"ents","type":"address[]"},{"internalType":"bool[]","name":"entIsNaaS","type":"bool[]"},{"internalType":"bool","name":"useChecks","type":"bool"}],"name":"grantAccess","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"strongTokenAddress","type":"address"},{"internalType":"address","name":"strongPoolAddress","type":"address"},{"internalType":"address","name":"adminAddress","type":"address"},{"internalType":"address","name":"superAdminAddress","type":"address"},{"internalType":"uint256","name":"rewardPerBlockNumeratorValue","type":"uint256"},{"internalType":"uint256","name":"rewardPerBlockDenominatorValue","type":"uint256"},{"internalType":"uint256","name":"naasRewardPerBlockNumeratorValue","type":"uint256"},{"internalType":"uint256","name":"naasRewardPerBlockDenominatorValue","type":"uint256"},{"internalType":"uint256","name":"requestingFeeInWeiValue","type":"uint256"},{"internalType":"uint256","name":"strongFeeInWeiValue","type":"uint256"},{"internalType":"uint256","name":"recurringFeeInWeiValue","type":"uint256"},{"internalType":"uint256","name":"recurringNaaSFeeInWeiValue","type":"uint256"},{"internalType":"uint256","name":"recurringPaymentCycleInBlocksValue","type":"uint256"},{"internalType":"uint256","name":"claimingFeeNumeratorValue","type":"uint256"},{"internalType":"uint256","name":"claimingFeeDenominatorValue","type":"uint256"},{"internalType":"string","name":"desc","type":"string"}],"name":"init","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"initDone","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"entity","type":"address"}],"name":"isEntityActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"naasRequestingFeeInWei","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"naasRewardPerBlockDenominator","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"naasRewardPerBlockNumerator","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"naasStrongFeeInWei","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"paidOnBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"parameterAdmin","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"payFee","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"pendingAdmin","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pendingSuperAdmin","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"recurringFeeInWei","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"recurringNaaSFeeInWei","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"recurringPaymentCycleInBlocks","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"removedTokens","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"isNaaS","type":"bool"}],"name":"requestAccess","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"requestPending","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"requestingFeeInWei","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rewardBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rewardPerBlockDenominator","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"rewardPerBlockNumerator","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"serviceAdmin","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"entity","type":"address"},{"internalType":"bool","name":"status","type":"bool"}],"name":"setEntityActiveStatus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newPendingAdmin","type":"address"}],"name":"setPendingAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newPendingSuperAdmin","type":"address"}],"name":"setPendingSuperAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"strongFeeInWei","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"strongPool","outputs":[{"internalType":"contract StrongPoolInterface","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"strongToken","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"superAdmin","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"traunch","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"numerator","type":"uint256"},{"internalType":"uint256","name":"denominator","type":"uint256"}],"name":"updateClaimingFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"value","type":"uint256"}],"name":"updateCurrentTraunch","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"newFeeCollector","type":"address"}],"name":"updateFeeCollector","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"numerator","type":"uint256"},{"internalType":"uint256","name":"denominator","type":"uint256"}],"name":"updateNaaSRewardPerBlock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"feeInWei","type":"uint256"}],"name":"updateNaasRequestingFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"feeInWei","type":"uint256"}],"name":"updateNaasStrongFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newParameterAdmin","type":"address"}],"name":"updateParameterAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"feeInWei","type":"uint256"}],"name":"updateRecurringFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"feeInWei","type":"uint256"}],"name":"updateRecurringNaaSFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"blocks","type":"uint256"}],"name":"updateRecurringPaymentCycleInBlocks","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"feeInWei","type":"uint256"}],"name":"updateRequestingFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"numerator","type":"uint256"},{"internalType":"uint256","name":"denominator","type":"uint256"}],"name":"updateRewardPerBlock","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newServiceAdmin","type":"address"}],"name":"updateServiceAdmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"feeInWei","type":"uint256"}],"name":"updateStrongFee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"destination","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]

608060405234801561001057600080fd5b506135ee806100206000396000f3fe6080604052600436106103fa5760003560e01c80639162c59411610213578063c723143f11610123578063e4ae0c8a116100ab578063f3368f901161007a578063f3368f9014610f7b578063f3fef3a314610fa5578063f851a44014610fde578063fed0a20e14610ff3578063ffbb698914611008576103fa565b8063e4ae0c8a14610e88578063e603c27014610eb2578063e7f9cefd14610f3c578063e877db1a14610f51576103fa565b8063d9df77de116100f2578063d9df77de14610e0a578063da998dca14610e1f578063dc0bbf0814610e34578063e195232e14610e49578063e1d4b29d14610e5e576103fa565b8063c723143f14610c69578063d2c35ce814610d8f578063d39ca7de14610dc2578063d95210d014610df5576103fa565b8063b021465f116101a6578063c0f0622d11610175578063c0f0622d14610adf578063c1b0cda514610af4578063c2b2fdca14610c2a578063c415b95c14610c3f578063c4ac59b214610c54576103fa565b8063b021465f14610a16578063b1dfb9b314610a49578063b6b55f2514610a82578063c00007b014610aac576103fa565b8063a978dab7116101e2578063a978dab714610971578063aa5c3ab4146109a4578063ad553eef146109b9578063ae749c42146109ec576103fa565b80639162c59414610908578063965d61b91461091d57806399e6f700146109325780639edb4fb714610947576103fa565b8063418bc2c71161030e57806368acd042116102a157806387f48f4e1161027057806387f48f4e146108405780638aa9a37f146108555780638ac2f9dd146108855780638d0c479b146108c05780638faad75d146108d5576103fa565b806368acd042146107d15780636f300155146107e65780636f36c10c146107fb578063857d49d51461082b576103fa565b80634dd18bf5116102dd5780634dd18bf514610735578063623ef910146107685780636331883b1461079257806367cb6526146107bc576103fa565b8063418bc2c7146106a557806348028d63146106ba5780634c359aeb146106cf5780634c8024cc14610702576103fa565b8063267822471161039157806331b933b91161036057806331b933b91461059357806334dce6b3146105f8578063379607f51461062b578063383923951461064857806340b584b414610672576103fa565b8063267822471461051257806329575f6a1461054357806329610252146105585780632b6b66bb14610560576103fa565b80630fe48b36116103cd5780630fe48b361461048c5780631585dc28146104a157806316f28a2a146104b657806319885898146104fd576103fa565b806305eec289146103ff57806309a07fd2146104205780630a8d1be2146104475780630e18b68114610477575b600080fd5b61041e6004803603602081101561041557600080fd5b5035151561103b565b005b34801561042c57600080fd5b50610435611350565b60408051918252519081900360200190f35b34801561045357600080fd5b5061041e6004803603604081101561046a57600080fd5b5080359060200135611356565b34801561048357600080fd5b5061041e611420565b34801561049857600080fd5b506104356114af565b3480156104ad57600080fd5b506104356114b5565b3480156104c257600080fd5b506104e9600480360360208110156104d957600080fd5b50356001600160a01b03166114bb565b604080519115158252519081900360200190f35b34801561050957600080fd5b506104356114d0565b34801561051e57600080fd5b506105276114d6565b604080516001600160a01b039092168252519081900360200190f35b34801561054f57600080fd5b506105276114e5565b61041e6114f4565b34801561056c57600080fd5b506104356004803603602081101561058357600080fd5b50356001600160a01b03166115fc565b34801561059f57600080fd5b506105a861160e565b60408051602080825283518183015283519192839290830191858101910280838360005b838110156105e45781810151838201526020016105cc565b505050509050019250505060405180910390f35b34801561060457600080fd5b506104e96004803603602081101561061b57600080fd5b50356001600160a01b0316611670565b61041e6004803603602081101561064157600080fd5b5035611692565b34801561065457600080fd5b5061041e6004803603602081101561066b57600080fd5b5035611af2565b34801561067e57600080fd5b5061041e6004803603602081101561069557600080fd5b50356001600160a01b0316611b74565b3480156106b157600080fd5b5061041e611bf1565b3480156106c657600080fd5b50610527611d25565b3480156106db57600080fd5b50610435600480360360208110156106f257600080fd5b50356001600160a01b0316611d34565b34801561070e57600080fd5b506104356004803603602081101561072557600080fd5b50356001600160a01b0316611d46565b34801561074157600080fd5b5061041e6004803603602081101561075857600080fd5b50356001600160a01b0316611d58565b34801561077457600080fd5b5061041e6004803603602081101561078b57600080fd5b5035611dca565b34801561079e57600080fd5b50610527600480360360208110156107b557600080fd5b5035611e4c565b3480156107c857600080fd5b50610435611e73565b3480156107dd57600080fd5b50610435611e79565b3480156107f257600080fd5b50610435611e7f565b34801561080757600080fd5b5061041e6004803603604081101561081e57600080fd5b5080359060200135611e85565b34801561083757600080fd5b50610527611f4f565b34801561084c57600080fd5b50610435611f5e565b34801561086157600080fd5b5061041e6004803603604081101561087857600080fd5b5080359060200135611f64565b34801561089157600080fd5b5061041e600480360360408110156108a857600080fd5b506001600160a01b038135169060200135151561202e565b3480156108cc57600080fd5b50610435612352565b3480156108e157600080fd5b50610435600480360360208110156108f857600080fd5b50356001600160a01b0316612358565b34801561091457600080fd5b50610435612373565b34801561092957600080fd5b50610527612379565b34801561093e57600080fd5b50610435612388565b34801561095357600080fd5b5061041e6004803603602081101561096a57600080fd5b503561238e565b34801561097d57600080fd5b506104356004803603602081101561099457600080fd5b50356001600160a01b0316612410565b3480156109b057600080fd5b50610435612422565b3480156109c557600080fd5b5061041e600480360360208110156109dc57600080fd5b50356001600160a01b0316612428565b3480156109f857600080fd5b5061041e60048036036020811015610a0f57600080fd5b5035612461565b348015610a2257600080fd5b506104e960048036036020811015610a3957600080fd5b50356001600160a01b03166124e3565b348015610a5557600080fd5b5061043560048036036040811015610a6c57600080fd5b506001600160a01b0381351690602001356124f8565b348015610a8e57600080fd5b5061041e60048036036020811015610aa557600080fd5b50356125fb565b348015610ab857600080fd5b5061043560048036036020811015610acf57600080fd5b50356001600160a01b0316612720565b348015610aeb57600080fd5b506104e96127ec565b348015610b0057600080fd5b5061041e60048036036060811015610b1757600080fd5b810190602081018135640100000000811115610b3257600080fd5b820183602082011115610b4457600080fd5b80359060200191846020830284011164010000000083111715610b6657600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050640100000000811115610bb657600080fd5b820183602082011115610bc857600080fd5b80359060200191846020830284011164010000000083111715610bea57600080fd5b91908080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525092955050505035151590506127f5565b348015610c3657600080fd5b50610435612b38565b348015610c4b57600080fd5b50610527612b3e565b348015610c6057600080fd5b50610435612b4d565b348015610c7557600080fd5b5061041e6004803603610200811015610c8d57600080fd5b6001600160a01b038235811692602081013582169260408201358316926060830135169160808101359160a08201359160c08101359160e08201359161010081013591610120820135916101408101359161016082013591610180810135916101a0820135916101c08101359181019061020081016101e0820135640100000000811115610d1a57600080fd5b820183602082011115610d2c57600080fd5b80359060200191846001830284011164010000000083111715610d4e57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550612b53945050505050565b348015610d9b57600080fd5b5061041e60048036036020811015610db257600080fd5b50356001600160a01b0316612cb6565b348015610dce57600080fd5b5061041e60048036036020811015610de557600080fd5b50356001600160a01b0316612d33565b348015610e0157600080fd5b50610435612da5565b348015610e1657600080fd5b50610435612dab565b348015610e2b57600080fd5b50610527612db1565b348015610e4057600080fd5b50610435612dc0565b348015610e5557600080fd5b50610527612dc6565b348015610e6a57600080fd5b5061041e60048036036020811015610e8157600080fd5b5035612dd5565b348015610e9457600080fd5b5061041e60048036036020811015610eab57600080fd5b5035612e57565b348015610ebe57600080fd5b50610ec7612ed9565b6040805160208082528351818301528351919283929083019185019080838360005b83811015610f01578181015183820152602001610ee9565b50505050905090810190601f168015610f2e5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b348015610f4857600080fd5b5061041e612f67565b348015610f5d57600080fd5b5061041e60048036036020811015610f7457600080fd5b5035612ff0565b348015610f8757600080fd5b5061041e60048036036020811015610f9e57600080fd5b50356130b0565b348015610fb157600080fd5b5061041e60048036036040811015610fc857600080fd5b506001600160a01b038135169060200135613132565b348015610fea57600080fd5b50610527613298565b348015610fff57600080fd5b506104e96132ac565b34801561101457600080fd5b506104e96004803603602081101561102b57600080fd5b50356001600160a01b03166132b5565b3360009081526018602052604090205460ff1615611089576040805162461bcd60e51b815260206004820152600660248201526561637469766560d01b604482015290519081900360640190fd5b6000808215611148575050601f54602080546016805433600081815260178652604080822084905560018085019095557fd833147d7dc355ba459fc788f669e58cfaf9dc25ddcd0702e87d69c7b5124289840180546001600160a01b03191690931790925560188652818120805460ff1990811686179091556019909652208054909416909355601c5491929161111f916132ca565b601c55503360009081526015602090815260408083204390819055601b9092529091205561116b565b5050600f54601054336000908152601960205260409020805460ff191660011790555b336000908152601a60205260409020805460ff19168415151790553482146111c8576040805162461bcd60e51b815260206004820152600b60248201526a696e76616c69642066656560a81b604482015290519081900360640190fd5b6006546040516001600160a01b03909116903480156108fc02916000818181858888f19350505050158015611201573d6000803e3d6000fd5b50600754604080516323b872dd60e01b81523360048201523060248201526044810184905290516001600160a01b03909216916323b872dd916064808201926020929091908290030181600087803b15801561125c57600080fd5b505af1158015611270573d6000803e3d6000fd5b505050506040513d602081101561128657600080fd5b50506007546006546040805163a9059cbb60e01b81526001600160a01b039283166004820152602481018590529051919092169163a9059cbb9160448083019260209291908290030181600087803b1580156112e157600080fd5b505af11580156112f5573d6000803e3d6000fd5b505050506040513d602081101561130b57600080fd5b50506023543360008181526022602052604080822093909355915190917f039f711c9c18dd815b225b1424855e6118e746c6b5d688907f10c4dd29ebe92a91a2505050565b600d5481565b60005461010090046001600160a01b031633148061137e57506005546001600160a01b031633145b8061139357506002546001600160a01b031633145b6113d3576040805162461bcd60e51b815260206004820152600c60248201526b3737ba1030b71030b236b4b760a11b604482015290519081900360640190fd5b80611415576040805162461bcd60e51b815260206004820152600d60248201526c696e76616c69642076616c756560981b604482015290519081900360640190fd5b600991909155600a55565b6001546001600160a01b03163314801561143957503315155b61147d576040805162461bcd60e51b815260206004820152601060248201526f3737ba103832b73234b733a0b236b4b760811b604482015290519081900360640190fd5b6001805460008054610100600160a81b0319166101006001600160a01b038416021790556001600160a01b0319169055565b60135481565b601f5481565b60186020526000908152604090205460ff1681565b600a5481565b6001546001600160a01b031681565b6002546001600160a01b031681565b336000908152601a602052604090205460ff161561155257601254341461154d576040805162461bcd60e51b81526020600482015260086024820152676e6161732066656560c01b604482015290519081900360640190fd5b611594565b6011543414611594576040805162461bcd60e51b815260206004820152600960248201526862617369632066656560b81b604482015290519081900360640190fd5b6006546040516001600160a01b03909116903480156108fc02916000818181858888f193505050501580156115cd573d6000803e3d6000fd5b50601354336000908152601b60205260409020546115ea916132ca565b336000908152601b6020526040902055565b60226020526000908152604090205481565b6060601680548060200260200160405190810160405280929190818152602001828054801561166657602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311611648575b5050505050905090565b6001600160a01b03811660009081526018602052604090205460ff165b919050565b438111156116de576040805162461bcd60e51b815260206004820152601460248201527334b73b30b634b210313637b1b590373ab6b132b960611b604482015290519081900360640190fd5b33600090815260156020526040902054611727576040805162461bcd60e51b815260206004820152600560248201526432b93937b960d91b604482015290519081900360640190fd5b336000908152601560205260409020548111611775576040805162461bcd60e51b81526020600482015260086024820152673a37b79039b7b7b760c11b604482015290519081900360640190fd5b3360009081526018602052604090205460ff166117c6576040805162461bcd60e51b815260206004820152600a6024820152696e6f742061637469766560b01b604482015290519081900360640190fd5b336000908152601b6020526040902054611810576040805162461bcd60e51b815260206004808301919091526024820152637a65726f60e01b604482015290519081900360640190fd5b336000908152601a602052604090205460ff168015611830575060125415155b806118575750336000908152601a602052604090205460ff16158015611857575060115415155b156118b557601354336000908152601b6020526040902054611878916132ca565b81106118b5576040805162461bcd60e51b81526020600482015260076024820152667061792066656560c81b604482015290519081900360640190fd5b60006118c133836124f8565b905060008111611904576040805162461bcd60e51b81526020600482015260096024820152681b9bc81c995dd85c9960ba1b604482015290519081900360640190fd5b6000611927600e54611921600d548561332b90919063ffffffff16565b90613384565b905080341461196b576040805162461bcd60e51b815260206004820152600b60248201526a696e76616c69642066656560a81b604482015290519081900360640190fd5b6006546040516001600160a01b03909116903480156108fc02916000818181858888f193505050501580156119a4573d6000803e3d6000fd5b506007546008546040805163095ea7b360e01b81526001600160a01b039283166004820152602481018690529051919092169163095ea7b39160448083019260209291908290030181600087803b1580156119fe57600080fd5b505af1158015611a12573d6000803e3d6000fd5b505050506040513d6020811015611a2857600080fd5b5050600854604080516330d6a97560e01b81523360048201526024810185905290516001600160a01b03909216916330d6a9759160448082019260009290919082900301818387803b158015611a7d57600080fd5b505af1158015611a91573d6000803e3d6000fd5b5050601454611aa392509050836133c6565b60145533600081815260156020908152604091829020869055815185815291517fd8138f8a3f377c5259ca548e70e4c2de94f129f5a11036a15b69513cba2b426a9281900390910190a2505050565b60005461010090046001600160a01b0316331480611b1a57506005546001600160a01b031633145b80611b2f57506002546001600160a01b031633145b611b6f576040805162461bcd60e51b815260206004820152600c60248201526b3737ba1030b71030b236b4b760a11b604482015290519081900360640190fd5b601255565b6001600160a01b038116611bb8576040805162461bcd60e51b815260206004808301919091526024820152637a65726f60e01b604482015290519081900360640190fd5b6002546001600160a01b03163314611bcf57600080fd5b600580546001600160a01b0319166001600160a01b0392909216919091179055565b60215460ff1615611c3b576040805162461bcd60e51b815260206004820152600f60248201526e185b1c9958591e481c995b5bdd9959608a1b604482015290519081900360640190fd5b6002546001600160a01b03163314611c89576040805162461bcd60e51b815260206004820152600c60248201526b3737ba1030b71030b236b4b760a11b604482015290519081900360640190fd5b6007546002546040805163a9059cbb60e01b81526001600160a01b03928316600482015268878678326eac90000060248201529051919092169163a9059cbb9160448083019260209291908290030181600087803b158015611cea57600080fd5b505af1158015611cfe573d6000803e3d6000fd5b505050506040513d6020811015611d1457600080fd5b50506021805460ff19166001179055565b6003546001600160a01b031681565b60156020526000908152604090205481565b60176020526000908152604090205481565b60005461010090046001600160a01b03163314611da8576040805162461bcd60e51b81526020600482015260096024820152683737ba1030b236b4b760b91b604482015290519081900360640190fd5b600180546001600160a01b0319166001600160a01b0392909216919091179055565b60005461010090046001600160a01b0316331480611df257506005546001600160a01b031633145b80611e0757506002546001600160a01b031633145b611e47576040805162461bcd60e51b815260206004820152600c60248201526b3737ba1030b71030b236b4b760a11b604482015290519081900360640190fd5b601055565b60168181548110611e5957fe5b6000918252602090912001546001600160a01b0316905081565b60125481565b60235481565b600f5481565b60005461010090046001600160a01b0316331480611ead57506005546001600160a01b031633145b80611ec257506002546001600160a01b031633145b611f02576040805162461bcd60e51b815260206004820152600c60248201526b3737ba1030b71030b236b4b760a11b604482015290519081900360640190fd5b80611f44576040805162461bcd60e51b815260206004820152600d60248201526c696e76616c69642076616c756560981b604482015290519081900360640190fd5b600b91909155600c55565b6005546001600160a01b031681565b600e5481565b60005461010090046001600160a01b0316331480611f8c57506005546001600160a01b031633145b80611fa157506002546001600160a01b031633145b611fe1576040805162461bcd60e51b815260206004820152600c60248201526b3737ba1030b71030b236b4b760a11b604482015290519081900360640190fd5b80612023576040805162461bcd60e51b815260206004820152600d60248201526c696e76616c69642076616c756560981b604482015290519081900360640190fd5b600d91909155600e55565b60005461010090046001600160a01b031633148061205657506004546001600160a01b031633145b8061206b57506002546001600160a01b031633145b6120a8576040805162461bcd60e51b81526020600482015260096024820152683737ba1030b236b4b760b91b604482015290519081900360640190fd5b6001600160a01b03821660008181526017602052604090205460168054919291839081106120d257fe5b6000918252602090912001546001600160a01b03161461212a576040805162461bcd60e51b815260206004820152600e60248201526d696e76616c696420656e7469747960901b604482015290519081900360640190fd5b6001600160a01b03831660009081526018602052604090205460ff161515821515141561218c576040805162461bcd60e51b815260206004820152600b60248201526a185b1c9958591e481cd95d60aa1b604482015290519081900360640190fd5b6001600160a01b0383166000908152601860205260409020805460ff191683158015919091179091556121ea57601c546121c79060016132ca565b601c556001600160a01b038316600090815260156020526040902043905561234d565b6001600160a01b03831660009081526015602052604090205443111561232257600061221584612720565b905080156123205760145461222a90826133c6565b6014556007546008546040805163095ea7b360e01b81526001600160a01b039283166004820152602481018590529051919092169163095ea7b39160448083019260209291908290030181600087803b15801561228657600080fd5b505af115801561229a573d6000803e3d6000fd5b505050506040513d60208110156122b057600080fd5b5050600854604080516330d6a97560e01b81526001600160a01b03878116600483015260248201859052915191909216916330d6a97591604480830192600092919082900301818387803b15801561230757600080fd5b505af115801561231b573d6000803e3d6000fd5b505050505b505b601c546123309060016133c6565b601c556001600160a01b0383166000908152601560205260408120555b505050565b60205481565b6001600160a01b031660009081526022602052604090205490565b60115481565b6007546001600160a01b031681565b60095481565b60005461010090046001600160a01b03163314806123b657506005546001600160a01b031633145b806123cb57506002546001600160a01b031633145b61240b576040805162461bcd60e51b815260206004820152600c60248201526b3737ba1030b71030b236b4b760a11b604482015290519081900360640190fd5b601f55565b601b6020526000908152604090205481565b60145481565b6002546001600160a01b0316331461243f57600080fd5b600480546001600160a01b0319166001600160a01b0392909216919091179055565b60005461010090046001600160a01b031633148061248957506005546001600160a01b031633145b8061249e57506002546001600160a01b031633145b6124de576040805162461bcd60e51b815260206004820152600c60248201526b3737ba1030b71030b236b4b760a11b604482015290519081900360640190fd5b600f55565b601a6020526000908152604090205460ff1681565b60004382111561250a575060006125f5565b6001600160a01b03831660009081526015602052604090205461252f575060006125f5565b6001600160a01b038316600090815260156020526040902054821015612557575060006125f5565b601c54612566575060006125f5565b6001600160a01b03831660009081526015602052604081205461258a9084906133c6565b6001600160a01b0385166000908152601a602052604081205491925090819060ff16156125be575050600b54600c546125c7565b5050600954600a545b60006125d782611921868661332b565b90506125ee601c548261338490919063ffffffff16565b9450505050505b92915050565b6002546001600160a01b03163314612649576040805162461bcd60e51b815260206004820152600c60248201526b3737ba1030b71030b236b4b760a11b604482015290519081900360640190fd5b60008111612687576040805162461bcd60e51b815260206004808301919091526024820152637a65726f60e01b604482015290519081900360640190fd5b600754604080516323b872dd60e01b81523360048201523060248201526044810184905290516001600160a01b03909216916323b872dd916064808201926020929091908290030181600087803b1580156126e157600080fd5b505af11580156126f5573d6000803e3d6000fd5b505050506040513d602081101561270b57600080fd5b505060145461271a90826132ca565b60145550565b6000601c54600014156127355750600061168d565b6001600160a01b03821660009081526015602052604090205461275a5750600061168d565b6001600160a01b03821660009081526015602052604081205461277e9043906133c6565b6001600160a01b0384166000908152601a602052604081205491925090819060ff16156127b2575050600b54600c546127bb565b5050600954600a545b60006127cb82611921868661332b565b90506127e2601c548261338490919063ffffffff16565b9695505050505050565b60215460ff1681565b60005461010090046001600160a01b031633148061281d57506004546001600160a01b031633145b8061283257506002546001600160a01b031633145b61286f576040805162461bcd60e51b81526020600482015260096024820152683737ba1030b236b4b760b91b604482015290519081900360640190fd5b60008351116128ae576040805162461bcd60e51b815260206004808301919091526024820152637a65726f60e01b604482015290519081900360640190fd5b81518351146128f9576040805162461bcd60e51b81526020600482015260126024820152710d8cadccee8d0e640c8dedce840dac2e8c6d60731b604482015290519081900360640190fd5b60005b8351811015612b3257600084828151811061291357fe5b60200260200101519050600084838151811061292b57fe5b6020026020010151905083156129f9576001600160a01b03821660009081526019602052604090205460ff16612996576040805162461bcd60e51b815260206004820152600b60248201526a6e6f742070656e64696e6760a81b604482015290519081900360640190fd5b6001600160a01b0382166000908152601a602052604090205460ff161515811515146129f9576040805162461bcd60e51b815260206004820152600d60248201526c0dcc2c2e640dcde40dac2e8c6d609b1b604482015290519081900360640190fd5b6001600160a01b03821660009081526018602052604090205460ff1615612a50576040805162461bcd60e51b815260206004820152600660248201526565786973747360d01b604482015290519081900360640190fd5b601680546001600160a01b038416600081815260176020908152604080832085905560018086019096557fd833147d7dc355ba459fc788f669e58cfaf9dc25ddcd0702e87d69c7b5124289850180546001600160a01b03191690941790935560188152828220805460ff19908116871790915560198252838320805482169055601a9091529190208054909116841515179055601c549091612af291906132ca565b601c5550506001600160a01b031660009081526015602090815260408083204390819055601b8352818420556023546022909252909120556001016128fc565b50505050565b601e5481565b6006546001600160a01b031681565b600c5481565b60005460ff1615612b97576040805162461bcd60e51b8152602060048201526009602482015268696e697420646f6e6560b81b604482015290519081900360640190fd5b8f600760006101000a8154816001600160a01b0302191690836001600160a01b031602179055508e600860006101000a8154816001600160a01b0302191690836001600160a01b031602179055508d600060016101000a8154816001600160a01b0302191690836001600160a01b031602179055508c600260006101000a8154816001600160a01b0302191690836001600160a01b031602179055508b6009819055508a600a8190555089600b8190555088600c8190555087600f8190555086601081905550856011819055508460128190555082600d8190555081600e819055508360138190555080601d9080519060200190612c96929190613504565b50506000805460ff19166001179055505050505050505050505050505050565b6001600160a01b038116612cfa576040805162461bcd60e51b815260206004808301919091526024820152637a65726f60e01b604482015290519081900360640190fd5b6002546001600160a01b03163314612d1157600080fd5b600680546001600160a01b0319166001600160a01b0392909216919091179055565b6002546001600160a01b03163314612d83576040805162461bcd60e51b815260206004820152600e60248201526d3737ba1039bab832b920b236b4b760911b604482015290519081900360640190fd5b600380546001600160a01b0319166001600160a01b0392909216919091179055565b600b5481565b60105481565b6004546001600160a01b031681565b601c5481565b6008546001600160a01b031681565b60005461010090046001600160a01b0316331480612dfd57506005546001600160a01b031633145b80612e1257506002546001600160a01b031633145b612e52576040805162461bcd60e51b815260206004820152600c60248201526b3737ba1030b71030b236b4b760a11b604482015290519081900360640190fd5b602355565b60005461010090046001600160a01b0316331480612e7f57506005546001600160a01b031633145b80612e9457506002546001600160a01b031633145b612ed4576040805162461bcd60e51b815260206004820152600c60248201526b3737ba1030b71030b236b4b760a11b604482015290519081900360640190fd5b602055565b601d805460408051602060026001851615610100026000190190941693909304601f81018490048402820184019092528181529291830182828015612f5f5780601f10612f3457610100808354040283529160200191612f5f565b820191906000526020600020905b815481529060010190602001808311612f4257829003601f168201915b505050505081565b6003546001600160a01b031633148015612f8057503315155b612fc9576040805162461bcd60e51b81526020600482015260156024820152743737ba103832b73234b733a9bab832b920b236b4b760591b604482015290519081900360640190fd5b60038054600280546001600160a01b03199081166001600160a01b03841617909155169055565b60005461010090046001600160a01b031633148061301857506005546001600160a01b031633145b8061302d57506002546001600160a01b031633145b61306d576040805162461bcd60e51b815260206004820152600c60248201526b3737ba1030b71030b236b4b760a11b604482015290519081900360640190fd5b600081116130ab576040805162461bcd60e51b815260206004808301919091526024820152637a65726f60e01b604482015290519081900360640190fd5b601355565b60005461010090046001600160a01b03163314806130d857506005546001600160a01b031633145b806130ed57506002546001600160a01b031633145b61312d576040805162461bcd60e51b815260206004820152600c60248201526b3737ba1030b71030b236b4b760a11b604482015290519081900360640190fd5b601155565b6002546001600160a01b03163314613180576040805162461bcd60e51b815260206004820152600c60248201526b3737ba1030b71030b236b4b760a11b604482015290519081900360640190fd5b600081116131be576040805162461bcd60e51b815260206004808301919091526024820152637a65726f60e01b604482015290519081900360640190fd5b806014541015613202576040805162461bcd60e51b815260206004820152600a6024820152690dcdee840cadcdeeaced60b31b604482015290519081900360640190fd5b6007546040805163a9059cbb60e01b81526001600160a01b038581166004830152602482018590529151919092169163a9059cbb9160448083019260209291908290030181600087803b15801561325857600080fd5b505af115801561326c573d6000803e3d6000fd5b505050506040513d602081101561328257600080fd5b505060145461329190826133c6565b6014555050565b60005461010090046001600160a01b031681565b60005460ff1681565b60196020526000908152604090205460ff1681565b600082820183811015613324576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b60008261333a575060006125f5565b8282028284828161334757fe5b04146133245760405162461bcd60e51b81526004018080602001828103825260218152602001806135986021913960400191505060405180910390fd5b600061332483836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613408565b600061332483836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506134aa565b600081836134945760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015613459578181015183820152602001613441565b50505050905090810190601f1680156134865780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385816134a057fe5b0495945050505050565b600081848411156134fc5760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315613459578181015183820152602001613441565b505050900390565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061354557805160ff1916838001178555613572565b82800160010185558215613572579182015b82811115613572578251825591602001919060010190613557565b5061357e929150613582565b5090565b5b8082111561357e576000815560010161358356fe536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77a2646970667358221220e9292a6cee1e05649b31876b9da7ca9a3427ca738eeec8d2b0509029c74407e064736f6c634300060c0033

Deployed Bytecode

0x6080604052600436106103fa5760003560e01c80639162c59411610213578063c723143f11610123578063e4ae0c8a116100ab578063f3368f901161007a578063f3368f9014610f7b578063f3fef3a314610fa5578063f851a44014610fde578063fed0a20e14610ff3578063ffbb698914611008576103fa565b8063e4ae0c8a14610e88578063e603c27014610eb2578063e7f9cefd14610f3c578063e877db1a14610f51576103fa565b8063d9df77de116100f2578063d9df77de14610e0a578063da998dca14610e1f578063dc0bbf0814610e34578063e195232e14610e49578063e1d4b29d14610e5e576103fa565b8063c723143f14610c69578063d2c35ce814610d8f578063d39ca7de14610dc2578063d95210d014610df5576103fa565b8063b021465f116101a6578063c0f0622d11610175578063c0f0622d14610adf578063c1b0cda514610af4578063c2b2fdca14610c2a578063c415b95c14610c3f578063c4ac59b214610c54576103fa565b8063b021465f14610a16578063b1dfb9b314610a49578063b6b55f2514610a82578063c00007b014610aac576103fa565b8063a978dab7116101e2578063a978dab714610971578063aa5c3ab4146109a4578063ad553eef146109b9578063ae749c42146109ec576103fa565b80639162c59414610908578063965d61b91461091d57806399e6f700146109325780639edb4fb714610947576103fa565b8063418bc2c71161030e57806368acd042116102a157806387f48f4e1161027057806387f48f4e146108405780638aa9a37f146108555780638ac2f9dd146108855780638d0c479b146108c05780638faad75d146108d5576103fa565b806368acd042146107d15780636f300155146107e65780636f36c10c146107fb578063857d49d51461082b576103fa565b80634dd18bf5116102dd5780634dd18bf514610735578063623ef910146107685780636331883b1461079257806367cb6526146107bc576103fa565b8063418bc2c7146106a557806348028d63146106ba5780634c359aeb146106cf5780634c8024cc14610702576103fa565b8063267822471161039157806331b933b91161036057806331b933b91461059357806334dce6b3146105f8578063379607f51461062b578063383923951461064857806340b584b414610672576103fa565b8063267822471461051257806329575f6a1461054357806329610252146105585780632b6b66bb14610560576103fa565b80630fe48b36116103cd5780630fe48b361461048c5780631585dc28146104a157806316f28a2a146104b657806319885898146104fd576103fa565b806305eec289146103ff57806309a07fd2146104205780630a8d1be2146104475780630e18b68114610477575b600080fd5b61041e6004803603602081101561041557600080fd5b5035151561103b565b005b34801561042c57600080fd5b50610435611350565b60408051918252519081900360200190f35b34801561045357600080fd5b5061041e6004803603604081101561046a57600080fd5b5080359060200135611356565b34801561048357600080fd5b5061041e611420565b34801561049857600080fd5b506104356114af565b3480156104ad57600080fd5b506104356114b5565b3480156104c257600080fd5b506104e9600480360360208110156104d957600080fd5b50356001600160a01b03166114bb565b604080519115158252519081900360200190f35b34801561050957600080fd5b506104356114d0565b34801561051e57600080fd5b506105276114d6565b604080516001600160a01b039092168252519081900360200190f35b34801561054f57600080fd5b506105276114e5565b61041e6114f4565b34801561056c57600080fd5b506104356004803603602081101561058357600080fd5b50356001600160a01b03166115fc565b34801561059f57600080fd5b506105a861160e565b60408051602080825283518183015283519192839290830191858101910280838360005b838110156105e45781810151838201526020016105cc565b505050509050019250505060405180910390f35b34801561060457600080fd5b506104e96004803603602081101561061b57600080fd5b50356001600160a01b0316611670565b61041e6004803603602081101561064157600080fd5b5035611692565b34801561065457600080fd5b5061041e6004803603602081101561066b57600080fd5b5035611af2565b34801561067e57600080fd5b5061041e6004803603602081101561069557600080fd5b50356001600160a01b0316611b74565b3480156106b157600080fd5b5061041e611bf1565b3480156106c657600080fd5b50610527611d25565b3480156106db57600080fd5b50610435600480360360208110156106f257600080fd5b50356001600160a01b0316611d34565b34801561070e57600080fd5b506104356004803603602081101561072557600080fd5b50356001600160a01b0316611d46565b34801561074157600080fd5b5061041e6004803603602081101561075857600080fd5b50356001600160a01b0316611d58565b34801561077457600080fd5b5061041e6004803603602081101561078b57600080fd5b5035611dca565b34801561079e57600080fd5b50610527600480360360208110156107b557600080fd5b5035611e4c565b3480156107c857600080fd5b50610435611e73565b3480156107dd57600080fd5b50610435611e79565b3480156107f257600080fd5b50610435611e7f565b34801561080757600080fd5b5061041e6004803603604081101561081e57600080fd5b5080359060200135611e85565b34801561083757600080fd5b50610527611f4f565b34801561084c57600080fd5b50610435611f5e565b34801561086157600080fd5b5061041e6004803603604081101561087857600080fd5b5080359060200135611f64565b34801561089157600080fd5b5061041e600480360360408110156108a857600080fd5b506001600160a01b038135169060200135151561202e565b3480156108cc57600080fd5b50610435612352565b3480156108e157600080fd5b50610435600480360360208110156108f857600080fd5b50356001600160a01b0316612358565b34801561091457600080fd5b50610435612373565b34801561092957600080fd5b50610527612379565b34801561093e57600080fd5b50610435612388565b34801561095357600080fd5b5061041e6004803603602081101561096a57600080fd5b503561238e565b34801561097d57600080fd5b506104356004803603602081101561099457600080fd5b50356001600160a01b0316612410565b3480156109b057600080fd5b50610435612422565b3480156109c557600080fd5b5061041e600480360360208110156109dc57600080fd5b50356001600160a01b0316612428565b3480156109f857600080fd5b5061041e60048036036020811015610a0f57600080fd5b5035612461565b348015610a2257600080fd5b506104e960048036036020811015610a3957600080fd5b50356001600160a01b03166124e3565b348015610a5557600080fd5b5061043560048036036040811015610a6c57600080fd5b506001600160a01b0381351690602001356124f8565b348015610a8e57600080fd5b5061041e60048036036020811015610aa557600080fd5b50356125fb565b348015610ab857600080fd5b5061043560048036036020811015610acf57600080fd5b50356001600160a01b0316612720565b348015610aeb57600080fd5b506104e96127ec565b348015610b0057600080fd5b5061041e60048036036060811015610b1757600080fd5b810190602081018135640100000000811115610b3257600080fd5b820183602082011115610b4457600080fd5b80359060200191846020830284011164010000000083111715610b6657600080fd5b9190808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509295949360208101935035915050640100000000811115610bb657600080fd5b820183602082011115610bc857600080fd5b80359060200191846020830284011164010000000083111715610bea57600080fd5b91908080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525092955050505035151590506127f5565b348015610c3657600080fd5b50610435612b38565b348015610c4b57600080fd5b50610527612b3e565b348015610c6057600080fd5b50610435612b4d565b348015610c7557600080fd5b5061041e6004803603610200811015610c8d57600080fd5b6001600160a01b038235811692602081013582169260408201358316926060830135169160808101359160a08201359160c08101359160e08201359161010081013591610120820135916101408101359161016082013591610180810135916101a0820135916101c08101359181019061020081016101e0820135640100000000811115610d1a57600080fd5b820183602082011115610d2c57600080fd5b80359060200191846001830284011164010000000083111715610d4e57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550612b53945050505050565b348015610d9b57600080fd5b5061041e60048036036020811015610db257600080fd5b50356001600160a01b0316612cb6565b348015610dce57600080fd5b5061041e60048036036020811015610de557600080fd5b50356001600160a01b0316612d33565b348015610e0157600080fd5b50610435612da5565b348015610e1657600080fd5b50610435612dab565b348015610e2b57600080fd5b50610527612db1565b348015610e4057600080fd5b50610435612dc0565b348015610e5557600080fd5b50610527612dc6565b348015610e6a57600080fd5b5061041e60048036036020811015610e8157600080fd5b5035612dd5565b348015610e9457600080fd5b5061041e60048036036020811015610eab57600080fd5b5035612e57565b348015610ebe57600080fd5b50610ec7612ed9565b6040805160208082528351818301528351919283929083019185019080838360005b83811015610f01578181015183820152602001610ee9565b50505050905090810190601f168015610f2e5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b348015610f4857600080fd5b5061041e612f67565b348015610f5d57600080fd5b5061041e60048036036020811015610f7457600080fd5b5035612ff0565b348015610f8757600080fd5b5061041e60048036036020811015610f9e57600080fd5b50356130b0565b348015610fb157600080fd5b5061041e60048036036040811015610fc857600080fd5b506001600160a01b038135169060200135613132565b348015610fea57600080fd5b50610527613298565b348015610fff57600080fd5b506104e96132ac565b34801561101457600080fd5b506104e96004803603602081101561102b57600080fd5b50356001600160a01b03166132b5565b3360009081526018602052604090205460ff1615611089576040805162461bcd60e51b815260206004820152600660248201526561637469766560d01b604482015290519081900360640190fd5b6000808215611148575050601f54602080546016805433600081815260178652604080822084905560018085019095557fd833147d7dc355ba459fc788f669e58cfaf9dc25ddcd0702e87d69c7b5124289840180546001600160a01b03191690931790925560188652818120805460ff1990811686179091556019909652208054909416909355601c5491929161111f916132ca565b601c55503360009081526015602090815260408083204390819055601b9092529091205561116b565b5050600f54601054336000908152601960205260409020805460ff191660011790555b336000908152601a60205260409020805460ff19168415151790553482146111c8576040805162461bcd60e51b815260206004820152600b60248201526a696e76616c69642066656560a81b604482015290519081900360640190fd5b6006546040516001600160a01b03909116903480156108fc02916000818181858888f19350505050158015611201573d6000803e3d6000fd5b50600754604080516323b872dd60e01b81523360048201523060248201526044810184905290516001600160a01b03909216916323b872dd916064808201926020929091908290030181600087803b15801561125c57600080fd5b505af1158015611270573d6000803e3d6000fd5b505050506040513d602081101561128657600080fd5b50506007546006546040805163a9059cbb60e01b81526001600160a01b039283166004820152602481018590529051919092169163a9059cbb9160448083019260209291908290030181600087803b1580156112e157600080fd5b505af11580156112f5573d6000803e3d6000fd5b505050506040513d602081101561130b57600080fd5b50506023543360008181526022602052604080822093909355915190917f039f711c9c18dd815b225b1424855e6118e746c6b5d688907f10c4dd29ebe92a91a2505050565b600d5481565b60005461010090046001600160a01b031633148061137e57506005546001600160a01b031633145b8061139357506002546001600160a01b031633145b6113d3576040805162461bcd60e51b815260206004820152600c60248201526b3737ba1030b71030b236b4b760a11b604482015290519081900360640190fd5b80611415576040805162461bcd60e51b815260206004820152600d60248201526c696e76616c69642076616c756560981b604482015290519081900360640190fd5b600991909155600a55565b6001546001600160a01b03163314801561143957503315155b61147d576040805162461bcd60e51b815260206004820152601060248201526f3737ba103832b73234b733a0b236b4b760811b604482015290519081900360640190fd5b6001805460008054610100600160a81b0319166101006001600160a01b038416021790556001600160a01b0319169055565b60135481565b601f5481565b60186020526000908152604090205460ff1681565b600a5481565b6001546001600160a01b031681565b6002546001600160a01b031681565b336000908152601a602052604090205460ff161561155257601254341461154d576040805162461bcd60e51b81526020600482015260086024820152676e6161732066656560c01b604482015290519081900360640190fd5b611594565b6011543414611594576040805162461bcd60e51b815260206004820152600960248201526862617369632066656560b81b604482015290519081900360640190fd5b6006546040516001600160a01b03909116903480156108fc02916000818181858888f193505050501580156115cd573d6000803e3d6000fd5b50601354336000908152601b60205260409020546115ea916132ca565b336000908152601b6020526040902055565b60226020526000908152604090205481565b6060601680548060200260200160405190810160405280929190818152602001828054801561166657602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311611648575b5050505050905090565b6001600160a01b03811660009081526018602052604090205460ff165b919050565b438111156116de576040805162461bcd60e51b815260206004820152601460248201527334b73b30b634b210313637b1b590373ab6b132b960611b604482015290519081900360640190fd5b33600090815260156020526040902054611727576040805162461bcd60e51b815260206004820152600560248201526432b93937b960d91b604482015290519081900360640190fd5b336000908152601560205260409020548111611775576040805162461bcd60e51b81526020600482015260086024820152673a37b79039b7b7b760c11b604482015290519081900360640190fd5b3360009081526018602052604090205460ff166117c6576040805162461bcd60e51b815260206004820152600a6024820152696e6f742061637469766560b01b604482015290519081900360640190fd5b336000908152601b6020526040902054611810576040805162461bcd60e51b815260206004808301919091526024820152637a65726f60e01b604482015290519081900360640190fd5b336000908152601a602052604090205460ff168015611830575060125415155b806118575750336000908152601a602052604090205460ff16158015611857575060115415155b156118b557601354336000908152601b6020526040902054611878916132ca565b81106118b5576040805162461bcd60e51b81526020600482015260076024820152667061792066656560c81b604482015290519081900360640190fd5b60006118c133836124f8565b905060008111611904576040805162461bcd60e51b81526020600482015260096024820152681b9bc81c995dd85c9960ba1b604482015290519081900360640190fd5b6000611927600e54611921600d548561332b90919063ffffffff16565b90613384565b905080341461196b576040805162461bcd60e51b815260206004820152600b60248201526a696e76616c69642066656560a81b604482015290519081900360640190fd5b6006546040516001600160a01b03909116903480156108fc02916000818181858888f193505050501580156119a4573d6000803e3d6000fd5b506007546008546040805163095ea7b360e01b81526001600160a01b039283166004820152602481018690529051919092169163095ea7b39160448083019260209291908290030181600087803b1580156119fe57600080fd5b505af1158015611a12573d6000803e3d6000fd5b505050506040513d6020811015611a2857600080fd5b5050600854604080516330d6a97560e01b81523360048201526024810185905290516001600160a01b03909216916330d6a9759160448082019260009290919082900301818387803b158015611a7d57600080fd5b505af1158015611a91573d6000803e3d6000fd5b5050601454611aa392509050836133c6565b60145533600081815260156020908152604091829020869055815185815291517fd8138f8a3f377c5259ca548e70e4c2de94f129f5a11036a15b69513cba2b426a9281900390910190a2505050565b60005461010090046001600160a01b0316331480611b1a57506005546001600160a01b031633145b80611b2f57506002546001600160a01b031633145b611b6f576040805162461bcd60e51b815260206004820152600c60248201526b3737ba1030b71030b236b4b760a11b604482015290519081900360640190fd5b601255565b6001600160a01b038116611bb8576040805162461bcd60e51b815260206004808301919091526024820152637a65726f60e01b604482015290519081900360640190fd5b6002546001600160a01b03163314611bcf57600080fd5b600580546001600160a01b0319166001600160a01b0392909216919091179055565b60215460ff1615611c3b576040805162461bcd60e51b815260206004820152600f60248201526e185b1c9958591e481c995b5bdd9959608a1b604482015290519081900360640190fd5b6002546001600160a01b03163314611c89576040805162461bcd60e51b815260206004820152600c60248201526b3737ba1030b71030b236b4b760a11b604482015290519081900360640190fd5b6007546002546040805163a9059cbb60e01b81526001600160a01b03928316600482015268878678326eac90000060248201529051919092169163a9059cbb9160448083019260209291908290030181600087803b158015611cea57600080fd5b505af1158015611cfe573d6000803e3d6000fd5b505050506040513d6020811015611d1457600080fd5b50506021805460ff19166001179055565b6003546001600160a01b031681565b60156020526000908152604090205481565b60176020526000908152604090205481565b60005461010090046001600160a01b03163314611da8576040805162461bcd60e51b81526020600482015260096024820152683737ba1030b236b4b760b91b604482015290519081900360640190fd5b600180546001600160a01b0319166001600160a01b0392909216919091179055565b60005461010090046001600160a01b0316331480611df257506005546001600160a01b031633145b80611e0757506002546001600160a01b031633145b611e47576040805162461bcd60e51b815260206004820152600c60248201526b3737ba1030b71030b236b4b760a11b604482015290519081900360640190fd5b601055565b60168181548110611e5957fe5b6000918252602090912001546001600160a01b0316905081565b60125481565b60235481565b600f5481565b60005461010090046001600160a01b0316331480611ead57506005546001600160a01b031633145b80611ec257506002546001600160a01b031633145b611f02576040805162461bcd60e51b815260206004820152600c60248201526b3737ba1030b71030b236b4b760a11b604482015290519081900360640190fd5b80611f44576040805162461bcd60e51b815260206004820152600d60248201526c696e76616c69642076616c756560981b604482015290519081900360640190fd5b600b91909155600c55565b6005546001600160a01b031681565b600e5481565b60005461010090046001600160a01b0316331480611f8c57506005546001600160a01b031633145b80611fa157506002546001600160a01b031633145b611fe1576040805162461bcd60e51b815260206004820152600c60248201526b3737ba1030b71030b236b4b760a11b604482015290519081900360640190fd5b80612023576040805162461bcd60e51b815260206004820152600d60248201526c696e76616c69642076616c756560981b604482015290519081900360640190fd5b600d91909155600e55565b60005461010090046001600160a01b031633148061205657506004546001600160a01b031633145b8061206b57506002546001600160a01b031633145b6120a8576040805162461bcd60e51b81526020600482015260096024820152683737ba1030b236b4b760b91b604482015290519081900360640190fd5b6001600160a01b03821660008181526017602052604090205460168054919291839081106120d257fe5b6000918252602090912001546001600160a01b03161461212a576040805162461bcd60e51b815260206004820152600e60248201526d696e76616c696420656e7469747960901b604482015290519081900360640190fd5b6001600160a01b03831660009081526018602052604090205460ff161515821515141561218c576040805162461bcd60e51b815260206004820152600b60248201526a185b1c9958591e481cd95d60aa1b604482015290519081900360640190fd5b6001600160a01b0383166000908152601860205260409020805460ff191683158015919091179091556121ea57601c546121c79060016132ca565b601c556001600160a01b038316600090815260156020526040902043905561234d565b6001600160a01b03831660009081526015602052604090205443111561232257600061221584612720565b905080156123205760145461222a90826133c6565b6014556007546008546040805163095ea7b360e01b81526001600160a01b039283166004820152602481018590529051919092169163095ea7b39160448083019260209291908290030181600087803b15801561228657600080fd5b505af115801561229a573d6000803e3d6000fd5b505050506040513d60208110156122b057600080fd5b5050600854604080516330d6a97560e01b81526001600160a01b03878116600483015260248201859052915191909216916330d6a97591604480830192600092919082900301818387803b15801561230757600080fd5b505af115801561231b573d6000803e3d6000fd5b505050505b505b601c546123309060016133c6565b601c556001600160a01b0383166000908152601560205260408120555b505050565b60205481565b6001600160a01b031660009081526022602052604090205490565b60115481565b6007546001600160a01b031681565b60095481565b60005461010090046001600160a01b03163314806123b657506005546001600160a01b031633145b806123cb57506002546001600160a01b031633145b61240b576040805162461bcd60e51b815260206004820152600c60248201526b3737ba1030b71030b236b4b760a11b604482015290519081900360640190fd5b601f55565b601b6020526000908152604090205481565b60145481565b6002546001600160a01b0316331461243f57600080fd5b600480546001600160a01b0319166001600160a01b0392909216919091179055565b60005461010090046001600160a01b031633148061248957506005546001600160a01b031633145b8061249e57506002546001600160a01b031633145b6124de576040805162461bcd60e51b815260206004820152600c60248201526b3737ba1030b71030b236b4b760a11b604482015290519081900360640190fd5b600f55565b601a6020526000908152604090205460ff1681565b60004382111561250a575060006125f5565b6001600160a01b03831660009081526015602052604090205461252f575060006125f5565b6001600160a01b038316600090815260156020526040902054821015612557575060006125f5565b601c54612566575060006125f5565b6001600160a01b03831660009081526015602052604081205461258a9084906133c6565b6001600160a01b0385166000908152601a602052604081205491925090819060ff16156125be575050600b54600c546125c7565b5050600954600a545b60006125d782611921868661332b565b90506125ee601c548261338490919063ffffffff16565b9450505050505b92915050565b6002546001600160a01b03163314612649576040805162461bcd60e51b815260206004820152600c60248201526b3737ba1030b71030b236b4b760a11b604482015290519081900360640190fd5b60008111612687576040805162461bcd60e51b815260206004808301919091526024820152637a65726f60e01b604482015290519081900360640190fd5b600754604080516323b872dd60e01b81523360048201523060248201526044810184905290516001600160a01b03909216916323b872dd916064808201926020929091908290030181600087803b1580156126e157600080fd5b505af11580156126f5573d6000803e3d6000fd5b505050506040513d602081101561270b57600080fd5b505060145461271a90826132ca565b60145550565b6000601c54600014156127355750600061168d565b6001600160a01b03821660009081526015602052604090205461275a5750600061168d565b6001600160a01b03821660009081526015602052604081205461277e9043906133c6565b6001600160a01b0384166000908152601a602052604081205491925090819060ff16156127b2575050600b54600c546127bb565b5050600954600a545b60006127cb82611921868661332b565b90506127e2601c548261338490919063ffffffff16565b9695505050505050565b60215460ff1681565b60005461010090046001600160a01b031633148061281d57506004546001600160a01b031633145b8061283257506002546001600160a01b031633145b61286f576040805162461bcd60e51b81526020600482015260096024820152683737ba1030b236b4b760b91b604482015290519081900360640190fd5b60008351116128ae576040805162461bcd60e51b815260206004808301919091526024820152637a65726f60e01b604482015290519081900360640190fd5b81518351146128f9576040805162461bcd60e51b81526020600482015260126024820152710d8cadccee8d0e640c8dedce840dac2e8c6d60731b604482015290519081900360640190fd5b60005b8351811015612b3257600084828151811061291357fe5b60200260200101519050600084838151811061292b57fe5b6020026020010151905083156129f9576001600160a01b03821660009081526019602052604090205460ff16612996576040805162461bcd60e51b815260206004820152600b60248201526a6e6f742070656e64696e6760a81b604482015290519081900360640190fd5b6001600160a01b0382166000908152601a602052604090205460ff161515811515146129f9576040805162461bcd60e51b815260206004820152600d60248201526c0dcc2c2e640dcde40dac2e8c6d609b1b604482015290519081900360640190fd5b6001600160a01b03821660009081526018602052604090205460ff1615612a50576040805162461bcd60e51b815260206004820152600660248201526565786973747360d01b604482015290519081900360640190fd5b601680546001600160a01b038416600081815260176020908152604080832085905560018086019096557fd833147d7dc355ba459fc788f669e58cfaf9dc25ddcd0702e87d69c7b5124289850180546001600160a01b03191690941790935560188152828220805460ff19908116871790915560198252838320805482169055601a9091529190208054909116841515179055601c549091612af291906132ca565b601c5550506001600160a01b031660009081526015602090815260408083204390819055601b8352818420556023546022909252909120556001016128fc565b50505050565b601e5481565b6006546001600160a01b031681565b600c5481565b60005460ff1615612b97576040805162461bcd60e51b8152602060048201526009602482015268696e697420646f6e6560b81b604482015290519081900360640190fd5b8f600760006101000a8154816001600160a01b0302191690836001600160a01b031602179055508e600860006101000a8154816001600160a01b0302191690836001600160a01b031602179055508d600060016101000a8154816001600160a01b0302191690836001600160a01b031602179055508c600260006101000a8154816001600160a01b0302191690836001600160a01b031602179055508b6009819055508a600a8190555089600b8190555088600c8190555087600f8190555086601081905550856011819055508460128190555082600d8190555081600e819055508360138190555080601d9080519060200190612c96929190613504565b50506000805460ff19166001179055505050505050505050505050505050565b6001600160a01b038116612cfa576040805162461bcd60e51b815260206004808301919091526024820152637a65726f60e01b604482015290519081900360640190fd5b6002546001600160a01b03163314612d1157600080fd5b600680546001600160a01b0319166001600160a01b0392909216919091179055565b6002546001600160a01b03163314612d83576040805162461bcd60e51b815260206004820152600e60248201526d3737ba1039bab832b920b236b4b760911b604482015290519081900360640190fd5b600380546001600160a01b0319166001600160a01b0392909216919091179055565b600b5481565b60105481565b6004546001600160a01b031681565b601c5481565b6008546001600160a01b031681565b60005461010090046001600160a01b0316331480612dfd57506005546001600160a01b031633145b80612e1257506002546001600160a01b031633145b612e52576040805162461bcd60e51b815260206004820152600c60248201526b3737ba1030b71030b236b4b760a11b604482015290519081900360640190fd5b602355565b60005461010090046001600160a01b0316331480612e7f57506005546001600160a01b031633145b80612e9457506002546001600160a01b031633145b612ed4576040805162461bcd60e51b815260206004820152600c60248201526b3737ba1030b71030b236b4b760a11b604482015290519081900360640190fd5b602055565b601d805460408051602060026001851615610100026000190190941693909304601f81018490048402820184019092528181529291830182828015612f5f5780601f10612f3457610100808354040283529160200191612f5f565b820191906000526020600020905b815481529060010190602001808311612f4257829003601f168201915b505050505081565b6003546001600160a01b031633148015612f8057503315155b612fc9576040805162461bcd60e51b81526020600482015260156024820152743737ba103832b73234b733a9bab832b920b236b4b760591b604482015290519081900360640190fd5b60038054600280546001600160a01b03199081166001600160a01b03841617909155169055565b60005461010090046001600160a01b031633148061301857506005546001600160a01b031633145b8061302d57506002546001600160a01b031633145b61306d576040805162461bcd60e51b815260206004820152600c60248201526b3737ba1030b71030b236b4b760a11b604482015290519081900360640190fd5b600081116130ab576040805162461bcd60e51b815260206004808301919091526024820152637a65726f60e01b604482015290519081900360640190fd5b601355565b60005461010090046001600160a01b03163314806130d857506005546001600160a01b031633145b806130ed57506002546001600160a01b031633145b61312d576040805162461bcd60e51b815260206004820152600c60248201526b3737ba1030b71030b236b4b760a11b604482015290519081900360640190fd5b601155565b6002546001600160a01b03163314613180576040805162461bcd60e51b815260206004820152600c60248201526b3737ba1030b71030b236b4b760a11b604482015290519081900360640190fd5b600081116131be576040805162461bcd60e51b815260206004808301919091526024820152637a65726f60e01b604482015290519081900360640190fd5b806014541015613202576040805162461bcd60e51b815260206004820152600a6024820152690dcdee840cadcdeeaced60b31b604482015290519081900360640190fd5b6007546040805163a9059cbb60e01b81526001600160a01b038581166004830152602482018590529151919092169163a9059cbb9160448083019260209291908290030181600087803b15801561325857600080fd5b505af115801561326c573d6000803e3d6000fd5b505050506040513d602081101561328257600080fd5b505060145461329190826133c6565b6014555050565b60005461010090046001600160a01b031681565b60005460ff1681565b60196020526000908152604090205460ff1681565b600082820183811015613324576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b9392505050565b60008261333a575060006125f5565b8282028284828161334757fe5b04146133245760405162461bcd60e51b81526004018080602001828103825260218152602001806135986021913960400191505060405180910390fd5b600061332483836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613408565b600061332483836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506134aa565b600081836134945760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015613459578181015183820152602001613441565b50505050905090810190601f1680156134865780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385816134a057fe5b0495945050505050565b600081848411156134fc5760405162461bcd60e51b8152602060048201818152835160248401528351909283926044909101919085019080838360008315613459578181015183820152602001613441565b505050900390565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061354557805160ff1916838001178555613572565b82800160010185558215613572579182015b82811115613572578251825591602001919060010190613557565b5061357e929150613582565b5090565b5b8082111561357e576000815560010161358356fe536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77a2646970667358221220e9292a6cee1e05649b31876b9da7ca9a3427ca738eeec8d2b0509029c74407e064736f6c634300060c0033

Deployed Bytecode Sourcemap

143:14915:2:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9072:998;;;;;;;;;;;;;;;;-1:-1:-1;9072:998:2;;;;:::i;:::-;;796:35;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;5457:326;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;5457:326:2;;;;;;;:::i;4063:181::-;;;;;;;;;;;;;:::i;1025:44::-;;;;;;;;;;;;;:::i;1545:37::-;;;;;;;;;;;;;:::i;1250:44::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1250:44:2;-1:-1:-1;;;;;1250:44:2;;:::i;:::-;;;;;;;;;;;;;;;;;;656:40;;;;;;;;;;;;;:::i;343:27::-;;;;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;343:27:2;;;;;;;;;;;;;;374:25;;;;;;;;;;;;;:::i;12020:344::-;;;:::i;1655:42::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1655:42:2;-1:-1:-1;;;;;1655:42:2;;:::i;4747:88::-;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4839:105;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;4839:105:2;-1:-1:-1;;;;;4839:105:2;;:::i;13939:1117::-;;;;;;;;;;;;;;;;-1:-1:-1;13939:1117:2;;:::i;8493:210::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;8493:210:2;;:::i;3504:202::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3504:202:2;-1:-1:-1;;;;;3504:202:2;;:::i;6683:346::-;;;;;;;;;;;;;:::i;403:32::-;;;;;;;;;;;;;:::i;1107:59::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1107:59:2;-1:-1:-1;;;;;1107:59:2;;:::i;1200:46::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1200:46:2;-1:-1:-1;;;;;1200:46:2;;:::i;3914:145::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3914:145:2;-1:-1:-1;;;;;3914:145:2;;:::i;7342:196::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;7342:196:2;;:::i;1171:25::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1171:25:2;;:::i;985:36::-;;;;;;;;;;;;;:::i;1702:29::-;;;;;;;;;;;;;:::i;877:33::-;;;;;;;;;;;;;:::i;5787:338::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;5787:338:2;;;;;;;:::i;470:29::-;;;;;;;;;;;;;:::i;835:37::-;;;;;;;;;;;;;:::i;7966:317::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;7966:317:2;;;;;;;:::i;11109:907::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;11109:907:2;;;;;;;;;;:::i;1587:33::-;;;;;;;;;;;;;:::i;5251:99::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;5251:99:2;-1:-1:-1;;;;;5251:99:2;;:::i;949:32::-;;;;;;;;;;;;;:::i;543:25::-;;;;;;;;;;;;;:::i;614:38::-;;;;;;;;;;;;;:::i;7542:212::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;7542:212:2;;:::i;1396:46::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1396:46:2;-1:-1:-1;;;;;1396:46:2;;:::i;1074:28::-;;;;;;;;;;;;;:::i;3360:140::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3360:140:2;-1:-1:-1;;;;;3360:140:2;;:::i;7134:204::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;7134:204:2;;:::i;1348:44::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1348:44:2;-1:-1:-1;;;;;1348:44:2;;:::i;13084:851::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;13084:851:2;;;;;;;;:::i;6129:245::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;6129:245:2;;:::i;12368:712::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;12368:712:2;-1:-1:-1;;;;;12368:712:2;;:::i;1625:25::-;;;;;;;;;;;;;:::i;10074:1031::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;10074:1031:2;;;;;;;;-1:-1:-1;10074:1031:2;;-1:-1:-1;;10074:1031:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;10074:1031:2;;-1:-1:-1;;;;10074:1031:2;;;;-1:-1:-1;10074:1031:2;:::i;1509:31::-;;;;;;;;;;;;;:::i;503:35::-;;;;;;;;;;;;;:::i;747:44::-;;;;;;;;;;;;;:::i;1736:1518::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1736:1518:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1736:1518:2;;-1:-1:-1;1736:1518:2;;-1:-1:-1;;;;;1736:1518:2:i;3710:200::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3710:200:2;-1:-1:-1;;;;;3710:200:2;;:::i;4248:175::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;4248:175:2;-1:-1:-1;;;;;4248:175:2;;:::i;701:42::-;;;;;;;;;;;;;:::i;915:29::-;;;;;;;;;;;;;:::i;439:27::-;;;;;;;;;;;;;:::i;1446:29::-;;;;;;;;;;;;;:::i;572:37::-;;;;;;;;;;;;;:::i;5052:195::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;5052:195:2;;:::i;7758:204::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;7758:204:2;;:::i;1480:24::-;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4427:211;;;;;;;;;;;;;:::i;8707:260::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;8707:260:2;;:::i;8287:202::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;8287:202:2;;:::i;6378:301::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;6378:301:2;;;;;;;;:::i;319:20::-;;;;;;;;;;;;;:::i;295:::-;;;;;;;;;;;;;:::i;1298:46::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1298:46:2;-1:-1:-1;;;;;1298:46:2;;:::i;9072:998::-;9151:10;9138:24;;;;:12;:24;;;;;;;;9137:25;9129:44;;;;;-1:-1:-1;;;9129:44:2;;;;;;;;;;;;-1:-1:-1;;;9129:44:2;;;;;;;;;;;;;;;9179:12;9197;9219:6;9215:544;;;-1:-1:-1;;9242:22:2;;9279:18;;;9319:8;:15;;9354:10;9305:11;9342:23;;;:11;:23;;;;;;:29;;;9379:25;;;;;;;;;;;;-1:-1:-1;;;;;;9379:25:2;;;;;;;9412:12;:24;;;;;:31;;-1:-1:-1;;9412:31:2;;;;;;;;9451:14;:26;;;;:34;;;;;;;;9510:14;;9279:18;;9319:15;9510:21;;:18;:21::i;:::-;9493:14;:38;-1:-1:-1;9564:10:2;9539:36;;;;:24;:36;;;;;;;;9578:12;9539:51;;;;9598:11;:23;;;;;;:38;9215:544;;;-1:-1:-1;;9664:18:2;;9697:14;;9734:10;9719:26;;;;:14;:26;;;;;:33;;-1:-1:-1;;9719:33:2;9748:4;9719:33;;;9215:544;9777:10;9764:24;;;;:12;:24;;;;;:33;;-1:-1:-1;;9764:33:2;;;;;;;9811:9;:17;;9803:41;;;;;-1:-1:-1;;;9803:41:2;;;;;;;;;;;;-1:-1:-1;;;9803:41:2;;;;;;;;;;;;;;;9850:12;;:32;;-1:-1:-1;;;;;9850:12:2;;;;9872:9;9850:32;;;;;:12;:32;:12;:32;9872:9;9850:12;:32;;;;;;;;;;;;;;;;;;;;-1:-1:-1;9888:11:2;;:57;;;-1:-1:-1;;;9888:57:2;;9913:10;9888:57;;;;9933:4;9888:57;;;;;;;;;;;;-1:-1:-1;;;;;9888:11:2;;;;:24;;:57;;;;;;;;;;;;;;;:11;;:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;9951:11:2;;9972:12;;9951:40;;;-1:-1:-1;;;9951:40:2;;-1:-1:-1;;;;;9972:12:2;;;9951:40;;;;;;;;;;;;:11;;;;;:20;;:40;;;;;9888:57;;9951:40;;;;;;;:11;;:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;10019:14:2;;10005:10;9997:19;;;;:7;9951:40;9997:19;;;;;:36;;;;10044:21;;10005:10;;10044:21;;;9072:998;;;:::o;796:35::-;;;;:::o;5457:326::-;5562:5;;;;;-1:-1:-1;;;;;5562:5:2;5548:10;:19;;:51;;-1:-1:-1;5585:14:2;;-1:-1:-1;;;;;5585:14:2;5571:10;:28;5548:51;:79;;;-1:-1:-1;5617:10:2;;-1:-1:-1;;;;;5617:10:2;5603;:24;5548:79;5540:104;;;;;-1:-1:-1;;;5540:104:2;;;;;;;;;;;;-1:-1:-1;;;5540:104:2;;;;;;;;;;;;;;;5658:16;5650:42;;;;;-1:-1:-1;;;5650:42:2;;;;;;;;;;;;-1:-1:-1;;;5650:42:2;;;;;;;;;;;;;;;5698:23;:35;;;;5739:25;:39;5457:326::o;4063:181::-;4121:12;;-1:-1:-1;;;;;4121:12:2;4107:10;:26;:54;;;;-1:-1:-1;4137:10:2;:24;;4107:54;4099:83;;;;;-1:-1:-1;;;4099:83:2;;;;;;;;;;;;-1:-1:-1;;;4099:83:2;;;;;;;;;;;;;;;4196:12;;;;4188:20;;-1:-1:-1;;;;;;4188:20:2;4196:12;-1:-1:-1;;;;;4196:12:2;;4188:20;;;;-1:-1:-1;;;;;;4214:25:2;;;4063:181::o;1025:44::-;;;;:::o;1545:37::-;;;;:::o;1250:44::-;;;;;;;;;;;;;;;:::o;656:40::-;;;;:::o;343:27::-;;;-1:-1:-1;;;;;343:27:2;;:::o;374:25::-;;;-1:-1:-1;;;;;374:25:2;;:::o;12020:344::-;12076:10;12063:24;;;;:12;:24;;;;;;;;12059:173;;;12118:21;;12105:9;:34;12097:55;;;;;-1:-1:-1;;;12097:55:2;;;;;;;;;;;;-1:-1:-1;;;12097:55:2;;;;;;;;;;;;;;;12059:173;;;12194:17;;12181:9;:30;12173:52;;;;;-1:-1:-1;;;12173:52:2;;;;;;;;;;;;-1:-1:-1;;;12173:52:2;;;;;;;;;;;;;;;12237:12;;:32;;-1:-1:-1;;;;;12237:12:2;;;;12259:9;12237:32;;;;;:12;:32;:12;:32;12259:9;12237:12;:32;;;;;;;;;;;;;;;;;;;;-1:-1:-1;12329:29:2;;12313:10;12301:23;;;;:11;:23;;;;;;:58;;:27;:58::i;:::-;12287:10;12275:23;;;;:11;:23;;;;;:84;12020:344::o;1655:42::-;;;;;;;;;;;;;:::o;4747:88::-;4791:16;4822:8;4815:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;4815:15:2;;;;;;;;;;;;;;;;;;;;;;;4747:88;:::o;4839:105::-;-1:-1:-1;;;;;4919:20:2;;4900:4;4919:20;;;:12;:20;;;;;;;;4839:105;;;;:::o;13939:1117::-;14019:12;14004:11;:27;;13996:60;;;;;-1:-1:-1;;;13996:60:2;;;;;;;;;;;;-1:-1:-1;;;13996:60:2;;;;;;;;;;;;;;;14095:10;14070:36;;;;:24;:36;;;;;;14062:59;;;;;-1:-1:-1;;;14062:59:2;;;;;;;;;;;;-1:-1:-1;;;14062:59:2;;;;;;;;;;;;;;;14174:10;14149:36;;;;:24;:36;;;;;;14135:50;;14127:71;;;;;-1:-1:-1;;;14127:71:2;;;;;;;;;;;;-1:-1:-1;;;14127:71:2;;;;;;;;;;;;;;;14225:10;14212:24;;;;:12;:24;;;;;;;;14204:47;;;;;-1:-1:-1;;;14204:47:2;;;;;;;;;;;;-1:-1:-1;;;14204:47:2;;;;;;;;;;;;;;;14277:10;14265:23;;;;:11;:23;;;;;;14257:45;;;;;-1:-1:-1;;;14257:45:2;;;;;;;;;;;;;;;-1:-1:-1;;;14257:45:2;;;;;;;;;;;;;;;14333:10;14320:24;;;;:12;:24;;;;;;;;:54;;;;-1:-1:-1;14348:21:2;;:26;;14320:54;14319:113;;;-1:-1:-1;14394:10:2;14381:24;;;;:12;:24;;;;;;;;14380:25;:51;;;;-1:-1:-1;14409:17:2;;:22;;14380:51;14308:238;;;14497:29;;14481:10;14469:23;;;;:11;:23;;;;;;:58;;:27;:58::i;:::-;14455:11;:72;14447:92;;;;;-1:-1:-1;;;14447:92:2;;;;;;;;;;;;-1:-1:-1;;;14447:92:2;;;;;;;;;;;;;;;14552:14;14569:41;14586:10;14598:11;14569:16;:41::i;:::-;14552:58;;14633:1;14624:6;:10;14616:32;;;;;-1:-1:-1;;;14616:32:2;;;;;;;;;;;;-1:-1:-1;;;14616:32:2;;;;;;;;;;;;;;;14654:11;14668:60;14705:22;;14668:32;14679:20;;14668:6;:10;;:32;;;;:::i;:::-;:36;;:60::i;:::-;14654:74;;14755:3;14742:9;:16;14734:40;;;;;-1:-1:-1;;;14734:40:2;;;;;;;;;;;;-1:-1:-1;;;14734:40:2;;;;;;;;;;;;;;;14780:12;;:32;;-1:-1:-1;;;;;14780:12:2;;;;14802:9;14780:32;;;;;:12;:32;:12;:32;14802:9;14780:12;:32;;;;;;;;;;;;;;;;;;;;-1:-1:-1;14818:11:2;;14846:10;;14818:48;;;-1:-1:-1;;;14818:48:2;;-1:-1:-1;;;;;14846:10:2;;;14818:48;;;;;;;;;;;;:11;;;;;:19;;:48;;;;;;;;;;;;;;:11;;:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;14872:10:2;;:38;;;-1:-1:-1;;;14872:38:2;;14891:10;14872:38;;;;;;;;;;;;-1:-1:-1;;;;;14872:10:2;;;;:18;;:38;;;;;:10;;:38;;;;;;;;:10;;:38;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;14932:13:2;;:25;;-1:-1:-1;14932:13:2;-1:-1:-1;14950:6:2;14932:17;:25::i;:::-;14916:13;:41;14988:10;14963:36;;;;:24;:36;;;;;;;;;:50;;;15024:27;;;;;;;;;;;;;;;;;13939:1117;;;:::o;8493:210::-;8578:5;;;;;-1:-1:-1;;;;;8578:5:2;8564:10;:19;;:51;;-1:-1:-1;8601:14:2;;-1:-1:-1;;;;;8601:14:2;8587:10;:28;8564:51;:79;;;-1:-1:-1;8633:10:2;;-1:-1:-1;;;;;8633:10:2;8619;:24;8564:79;8556:104;;;;;-1:-1:-1;;;8556:104:2;;;;;;;;;;;;-1:-1:-1;;;8556:104:2;;;;;;;;;;;;;;;8666:21;:32;8493:210::o;3504:202::-;-1:-1:-1;;;;;3582:31:2;;3574:48;;;;;-1:-1:-1;;;3574:48:2;;;;;;;;;;;;;;;-1:-1:-1;;;3574:48:2;;;;;;;;;;;;;;;3650:10;;-1:-1:-1;;;;;3650:10:2;3636;:24;3628:33;;;;;;3667:14;:34;;-1:-1:-1;;;;;;3667:34:2;-1:-1:-1;;;;;3667:34:2;;;;;;;;;;3504:202::o;6683:346::-;6729:13;;;;6728:14;6720:42;;;;;-1:-1:-1;;;6720:42:2;;;;;;;;;;;;-1:-1:-1;;;6720:42:2;;;;;;;;;;;;;;;6790:10;;-1:-1:-1;;;;;6790:10:2;6776;:24;6768:49;;;;;-1:-1:-1;;;6768:49:2;;;;;;;;;;;;-1:-1:-1;;;6768:49:2;;;;;;;;;;;;;;;6942:11;;6963:10;;6942:56;;;-1:-1:-1;;;6942:56:2;;-1:-1:-1;;;;;6963:10:2;;;6942:56;;;;6975:22;6942:56;;;;;;:11;;;;;:20;;:56;;;;;;;;;;;;;;:11;;:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;7004:13:2;:20;;-1:-1:-1;;7004:20:2;7020:4;7004:20;;;6683:346::o;403:32::-;;;-1:-1:-1;;;;;403:32:2;;:::o;1107:59::-;;;;;;;;;;;;;:::o;1200:46::-;;;;;;;;;;;;;:::o;3914:145::-;3999:5;;;;;-1:-1:-1;;;;;3999:5:2;3985:10;:19;3977:41;;;;;-1:-1:-1;;;3977:41:2;;;;;;;;;;;;-1:-1:-1;;;3977:41:2;;;;;;;;;;;;;;;4024:12;:30;;-1:-1:-1;;;;;;4024:30:2;-1:-1:-1;;;;;4024:30:2;;;;;;;;;;3914:145::o;7342:196::-;7420:5;;;;;-1:-1:-1;;;;;7420:5:2;7406:10;:19;;:51;;-1:-1:-1;7443:14:2;;-1:-1:-1;;;;;7443:14:2;7429:10;:28;7406:51;:79;;;-1:-1:-1;7475:10:2;;-1:-1:-1;;;;;7475:10:2;7461;:24;7406:79;7398:104;;;;;-1:-1:-1;;;7398:104:2;;;;;;;;;;;;-1:-1:-1;;;7398:104:2;;;;;;;;;;;;;;;7508:14;:25;7342:196::o;1171:25::-;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1171:25:2;;-1:-1:-1;1171:25:2;:::o;985:36::-;;;;:::o;1702:29::-;;;;:::o;877:33::-;;;;:::o;5787:338::-;5896:5;;;;;-1:-1:-1;;;;;5896:5:2;5882:10;:19;;:51;;-1:-1:-1;5919:14:2;;-1:-1:-1;;;;;5919:14:2;5905:10;:28;5882:51;:79;;;-1:-1:-1;5951:10:2;;-1:-1:-1;;;;;5951:10:2;5937;:24;5882:79;5874:104;;;;;-1:-1:-1;;;5874:104:2;;;;;;;;;;;;-1:-1:-1;;;5874:104:2;;;;;;;;;;;;;;;5992:16;5984:42;;;;;-1:-1:-1;;;5984:42:2;;;;;;;;;;;;-1:-1:-1;;;5984:42:2;;;;;;;;;;;;;;;6032:27;:39;;;;6077:29;:43;5787:338::o;470:29::-;;;-1:-1:-1;;;;;470:29:2;;:::o;835:37::-;;;;:::o;7966:317::-;8068:5;;;;;-1:-1:-1;;;;;8068:5:2;8054:10;:19;;:51;;-1:-1:-1;8091:14:2;;-1:-1:-1;;;;;8091:14:2;8077:10;:28;8054:51;:79;;;-1:-1:-1;8123:10:2;;-1:-1:-1;;;;;8123:10:2;8109;:24;8054:79;8046:104;;;;;-1:-1:-1;;;8046:104:2;;;;;;;;;;;;-1:-1:-1;;;8046:104:2;;;;;;;;;;;;;;;8164:16;8156:42;;;;;-1:-1:-1;;;8156:42:2;;;;;;;;;;;;-1:-1:-1;;;8156:42:2;;;;;;;;;;;;;;;8204:20;:32;;;;8242:22;:36;7966:317::o;11109:907::-;11204:5;;;;;-1:-1:-1;;;;;11204:5:2;11190:10;:19;;:49;;-1:-1:-1;11227:12:2;;-1:-1:-1;;;;;11227:12:2;11213:10;:26;11190:49;:77;;;-1:-1:-1;11257:10:2;;-1:-1:-1;;;;;11257:10:2;11243;:24;11190:77;11182:99;;;;;-1:-1:-1;;;11182:99:2;;;;;;;;;;;;-1:-1:-1;;;11182:99:2;;;;;;;;;;;;;;;-1:-1:-1;;;;;11303:19:2;;11287:13;11303:19;;;:11;:19;;;;;;11336:8;:15;;11303:19;;;;;11336:15;;;;;;;;;;;;;;;;-1:-1:-1;;;;;11336:15:2;:25;11328:52;;;;;-1:-1:-1;;;11328:52:2;;;;;;;;;;;;-1:-1:-1;;;11328:52:2;;;;;;;;;;;;;;;-1:-1:-1;;;;;11394:20:2;;;;;;:12;:20;;;;;;;;:30;;;;;;;11386:54;;;;;-1:-1:-1;;;11386:54:2;;;;;;;;;;;;-1:-1:-1;;;11386:54:2;;;;;;;;;;;;;;;-1:-1:-1;;;;;11446:20:2;;;;;;:12;:20;;;;;:29;;-1:-1:-1;;11446:29:2;;;;;;;;;;;;11481:531;;11518:14;;:21;;11537:1;11518:18;:21::i;:::-;11501:14;:38;-1:-1:-1;;;;;11547:32:2;;;;;;:24;:32;;;;;11582:12;11547:47;;11481:531;;;-1:-1:-1;;;;;11634:32:2;;;;;;:24;:32;;;;;;11619:12;:47;11615:301;;;11678:14;11695:17;11705:6;11695:9;:17::i;:::-;11678:34;-1:-1:-1;11726:10:2;;11722:186;;11766:13;;:25;;11784:6;11766:17;:25::i;:::-;11750:13;:41;11803:11;;11831:10;;11803:48;;;-1:-1:-1;;;11803:48:2;;-1:-1:-1;;;;;11831:10:2;;;11803:48;;;;;;;;;;;;:11;;;;;:19;;:48;;;;;;;;;;;;;;:11;;:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;11863:10:2;;:34;;;-1:-1:-1;;;11863:34:2;;-1:-1:-1;;;;;11863:34:2;;;;;;;;;;;;;;;:10;;;;;:18;;:34;;;;;:10;;:34;;;;;;;:10;;:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11722:186;11615:301;;11940:14;;:21;;11959:1;11940:18;:21::i;:::-;11923:14;:38;-1:-1:-1;;;;;11969:32:2;;12004:1;11969:32;;;:24;:32;;;;;:36;11481:531;11109:907;;;:::o;1587:33::-;;;;:::o;5251:99::-;-1:-1:-1;;;;;5330:15:2;5308:7;5330:15;;;:7;:15;;;;;;;5251:99::o;949:32::-;;;;:::o;543:25::-;;;-1:-1:-1;;;;;543:25:2;;:::o;614:38::-;;;;:::o;7542:212::-;7628:5;;;;;-1:-1:-1;;;;;7628:5:2;7614:10;:19;;:51;;-1:-1:-1;7651:14:2;;-1:-1:-1;;;;;7651:14:2;7637:10;:28;7614:51;:79;;;-1:-1:-1;7683:10:2;;-1:-1:-1;;;;;7683:10:2;7669;:24;7614:79;7606:104;;;;;-1:-1:-1;;;7606:104:2;;;;;;;;;;;;-1:-1:-1;;;7606:104:2;;;;;;;;;;;;;;;7716:22;:33;7542:212::o;1396:46::-;;;;;;;;;;;;;:::o;1074:28::-;;;;:::o;3360:140::-;3448:10;;-1:-1:-1;;;;;3448:10:2;3434;:24;3426:33;;;;;;3465:12;:30;;-1:-1:-1;;;;;;3465:30:2;-1:-1:-1;;;;;3465:30:2;;;;;;;;;;3360:140::o;7134:204::-;7216:5;;;;;-1:-1:-1;;;;;7216:5:2;7202:10;:19;;:51;;-1:-1:-1;7239:14:2;;-1:-1:-1;;;;;7239:14:2;7225:10;:28;7202:51;:79;;;-1:-1:-1;7271:10:2;;-1:-1:-1;;;;;7271:10:2;7257;:24;7202:79;7194:104;;;;;-1:-1:-1;;;7194:104:2;;;;;;;;;;;;-1:-1:-1;;;7194:104:2;;;;;;;;;;;;;;;7304:18;:29;7134:204::o;1348:44::-;;;;;;;;;;;;;;;:::o;13084:851::-;13168:7;13201:12;13187:11;:26;13183:40;;;-1:-1:-1;13222:1:2;13215:8;;13183:40;-1:-1:-1;;;;;13233:32:2;;;;;;:24;:32;;;;;;13229:51;;-1:-1:-1;13279:1:2;13272:8;;13229:51;-1:-1:-1;;;;;13304:32:2;;;;;;:24;:32;;;;;;13290:46;;13286:60;;;-1:-1:-1;13345:1:2;13338:8;;13286:60;13356:14;;13352:33;;-1:-1:-1;13384:1:2;13377:8;;13352:33;-1:-1:-1;;;;;13429:32:2;;13391:19;13429:32;;;:24;:32;;;;;;13413:49;;:11;;:15;:49::i;:::-;-1:-1:-1;;;;;13532:20:2;;13468:23;13532:20;;;:12;:20;;;;;;13391:71;;-1:-1:-1;13468:23:2;;;13532:20;;13528:258;;;-1:-1:-1;;13580:27:2;;13635:29;;13528:258;;;-1:-1:-1;;13703:23:2;;13754:25;;13528:258;13791:28;13822:55;13859:17;13822:32;:11;13838:15;13822;:32::i;:55::-;13791:86;;13890:40;13915:14;;13890:20;:24;;:40;;;;:::i;:::-;13883:47;;;;;;13084:851;;;;;:::o;6129:245::-;6197:10;;-1:-1:-1;;;;;6197:10:2;6183;:24;6175:49;;;;;-1:-1:-1;;;6175:49:2;;;;;;;;;;;;-1:-1:-1;;;6175:49:2;;;;;;;;;;;;;;;6247:1;6238:6;:10;6230:27;;;;;-1:-1:-1;;;6230:27:2;;;;;;;;;;;;;;;-1:-1:-1;;;6230:27:2;;;;;;;;;;;;;;;6263:11;;:59;;;-1:-1:-1;;;6263:59:2;;6288:10;6263:59;;;;6308:4;6263:59;;;;;;;;;;;;-1:-1:-1;;;;;6263:11:2;;;;:24;;:59;;;;;;;;;;;;;;;:11;;:59;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;6344:13:2;;:25;;6362:6;6344:17;:25::i;:::-;6328:13;:41;-1:-1:-1;6129:245:2:o;12368:712::-;12424:7;12443:14;;12461:1;12443:19;12439:33;;;-1:-1:-1;12471:1:2;12464:8;;12439:33;-1:-1:-1;;;;;12482:32:2;;;;;;:24;:32;;;;;;12478:51;;-1:-1:-1;12528:1:2;12521:8;;12478:51;-1:-1:-1;;;;;12574:32:2;;12535:19;12574:32;;;:24;:32;;;;;;12557:50;;:12;;:16;:50::i;:::-;-1:-1:-1;;;;;12677:20:2;;12613:23;12677:20;;;:12;:20;;;;;;12535:72;;-1:-1:-1;12613:23:2;;;12677:20;;12673:258;;;-1:-1:-1;;12725:27:2;;12780:29;;12673:258;;;-1:-1:-1;;12848:23:2;;12899:25;;12673:258;12936:28;12967:55;13004:17;12967:32;:11;12983:15;12967;:32::i;:55::-;12936:86;;13035:40;13060:14;;13035:20;:24;;:40;;;;:::i;:::-;13028:47;12368:712;-1:-1:-1;;;;;;12368:712:2:o;1625:25::-;;;;;;:::o;10074:1031::-;10210:5;;;;;-1:-1:-1;;;;;10210:5:2;10196:10;:19;;:49;;-1:-1:-1;10233:12:2;;-1:-1:-1;;;;;10233:12:2;10219:10;:26;10196:49;:77;;;-1:-1:-1;10263:10:2;;-1:-1:-1;;;;;10263:10:2;10249;:24;10196:77;10188:99;;;;;-1:-1:-1;;;10188:99:2;;;;;;;;;;;;-1:-1:-1;;;10188:99:2;;;;;;;;;;;;;;;10315:1;10301:4;:11;:15;10293:32;;;;;-1:-1:-1;;;10293:32:2;;;;;;;;;;;;;;;-1:-1:-1;;;10293:32:2;;;;;;;;;;;;;;;10354:9;:16;10339:4;:11;:31;10331:62;;;;;-1:-1:-1;;;10331:62:2;;;;;;;;;;;;-1:-1:-1;;;10331:62:2;;;;;;;;;;;;;;;10404:9;10399:702;10423:4;:11;10419:1;:15;10399:702;;;10449:14;10466:4;10471:1;10466:7;;;;;;;;;;;;;;10449:24;;10481:9;10493;10503:1;10493:12;;;;;;;;;;;;;;10481:24;;10517:9;10513:144;;;-1:-1:-1;;;;;10546:22:2;;;;;;:14;:22;;;;;;;;10538:46;;;;;-1:-1:-1;;;10538:46:2;;;;;;;;;;;;-1:-1:-1;;;10538:46:2;;;;;;;;;;;;;;;-1:-1:-1;;;;;10602:20:2;;;;;;:12;:20;;;;;;;;:28;;;;;;10594:54;;;;;-1:-1:-1;;;10594:54:2;;;;;;;;;;;;-1:-1:-1;;;10594:54:2;;;;;;;;;;;;;;;-1:-1:-1;;;;;10673:20:2;;;;;;:12;:20;;;;;;;;10672:21;10664:40;;;;;-1:-1:-1;;;10664:40:2;;;;;;;;;;;;-1:-1:-1;;;10664:40:2;;;;;;;;;;;;;;;10726:8;:15;;-1:-1:-1;;;;;10749:19:2;;10712:11;10749:19;;;:11;:19;;;;;;;;:25;;;10782:21;;;;;;;;;;;;-1:-1:-1;;;;;;10782:21:2;;;;;;;10811:12;:20;;;;;:27;;-1:-1:-1;;10811:27:2;;;;;;;;10846:14;:22;;;;;:30;;;;;;10884:12;:20;;;;;;:27;;;;;;;;;;;10936:14;;10726:15;;10936:21;;:14;:18;:21::i;:::-;10919:14;:38;-1:-1:-1;;;;;;;10965:32:2;;;;;:24;:32;;;;;;;;11000:12;10965:47;;;;11020:11;:19;;;;;:34;11080:14;;11062:7;:15;;;;;;:32;10436:3;;10399:702;;;;10074:1031;;;:::o;1509:31::-;;;;:::o;503:35::-;;;-1:-1:-1;;;;;503:35:2;;:::o;747:44::-;;;;:::o;1736:1518::-;2374:8;;;;2373:9;2365:31;;;;;-1:-1:-1;;;2365:31:2;;;;;;;;;;;;-1:-1:-1;;;2365:31:2;;;;;;;;;;;;;;;2423:18;2402:11;;:40;;;;;-1:-1:-1;;;;;2402:40:2;;;;;-1:-1:-1;;;;;2402:40:2;;;;;;2481:17;2448:10;;:51;;;;;-1:-1:-1;;;;;2448:51:2;;;;;-1:-1:-1;;;;;2448:51:2;;;;;;2513:12;2505:5;;:20;;;;;-1:-1:-1;;;;;2505:20:2;;;;;-1:-1:-1;;;;;2505:20:2;;;;;;2544:17;2531:10;;:30;;;;;-1:-1:-1;;;;;2531:30:2;;;;;-1:-1:-1;;;;;2531:30:2;;;;;;2593:28;2567:23;:54;;;;2655:30;2627:25;:58;;;;2721:32;2691:27;:62;;;;2791:34;2759:29;:66;;;;2852:23;2831:18;:44;;;;2898:19;2881:14;:36;;;;2943:22;2923:17;:42;;;;2995:26;2971:21;:50;;;;3050:25;3027:20;:48;;;;3106:27;3081:22;:52;;;;3171:34;3139:29;:66;;;;3224:4;3211:10;:17;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;3234:8:2;:15;;-1:-1:-1;;3234:15:2;3245:4;3234:15;;;-1:-1:-1;;;;;;;;;;;;;;;1736:1518:2:o;3710:200::-;-1:-1:-1;;;;;3792:29:2;;3784:46;;;;;-1:-1:-1;;;3784:46:2;;;;;;;;;;;;;;;-1:-1:-1;;;3784:46:2;;;;;;;;;;;;;;;3858:10;;-1:-1:-1;;;;;3858:10:2;3844;:24;3836:33;;;;;;3875:12;:30;;-1:-1:-1;;;;;;3875:30:2;-1:-1:-1;;;;;3875:30:2;;;;;;;;;;3710:200::o;4248:175::-;4343:10;;-1:-1:-1;;;;;4343:10:2;4329;:24;4321:51;;;;;-1:-1:-1;;;4321:51:2;;;;;;;;;;;;-1:-1:-1;;;4321:51:2;;;;;;;;;;;;;;;4378:17;:40;;-1:-1:-1;;;;;;4378:40:2;-1:-1:-1;;;;;4378:40:2;;;;;;;;;;4248:175::o;701:42::-;;;;:::o;915:29::-;;;;:::o;439:27::-;;;-1:-1:-1;;;;;439:27:2;;:::o;1446:29::-;;;;:::o;572:37::-;;;-1:-1:-1;;;;;572:37:2;;:::o;5052:195::-;5132:5;;;;;-1:-1:-1;;;;;5132:5:2;5118:10;:19;;:51;;-1:-1:-1;5155:14:2;;-1:-1:-1;;;;;5155:14:2;5141:10;:28;5118:51;:79;;;-1:-1:-1;5187:10:2;;-1:-1:-1;;;;;5187:10:2;5173;:24;5118:79;5110:104;;;;;-1:-1:-1;;;5110:104:2;;;;;;;;;;;;-1:-1:-1;;;5110:104:2;;;;;;;;;;;;;;;5220:14;:22;5052:195::o;7758:204::-;7840:5;;;;;-1:-1:-1;;;;;7840:5:2;7826:10;:19;;:51;;-1:-1:-1;7863:14:2;;-1:-1:-1;;;;;7863:14:2;7849:10;:28;7826:51;:79;;;-1:-1:-1;7895:10:2;;-1:-1:-1;;;;;7895:10:2;7881;:24;7826:79;7818:104;;;;;-1:-1:-1;;;7818:104:2;;;;;;;;;;;;-1:-1:-1;;;7818:104:2;;;;;;;;;;;;;;;7928:18;:29;7758:204::o;1480:24::-;;;;;;;;;;;;;;;-1:-1:-1;;1480:24:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;4427:211::-;4490:17;;-1:-1:-1;;;;;4490:17:2;4476:10;:31;:59;;;;-1:-1:-1;4511:10:2;:24;;4476:59;4468:93;;;;;-1:-1:-1;;;4468:93:2;;;;;;;;;;;;-1:-1:-1;;;4468:93:2;;;;;;;;;;;;;;;4580:17;;;4567:10;:30;;-1:-1:-1;;;;;;4567:30:2;;;-1:-1:-1;;;;;4580:17:2;;4567:30;;;;4603;;;4427:211::o;8707:260::-;8803:5;;;;;-1:-1:-1;;;;;8803:5:2;8789:10;:19;;:51;;-1:-1:-1;8826:14:2;;-1:-1:-1;;;;;8826:14:2;8812:10;:28;8789:51;:79;;;-1:-1:-1;8858:10:2;;-1:-1:-1;;;;;8858:10:2;8844;:24;8789:79;8781:104;;;;;-1:-1:-1;;;8781:104:2;;;;;;;;;;;;-1:-1:-1;;;8781:104:2;;;;;;;;;;;;;;;8908:1;8899:6;:10;8891:27;;;;;-1:-1:-1;;;8891:27:2;;;;;;;;;;;;;;;-1:-1:-1;;;8891:27:2;;;;;;;;;;;;;;;8924:29;:38;8707:260::o;8287:202::-;8368:5;;;;;-1:-1:-1;;;;;8368:5:2;8354:10;:19;;:51;;-1:-1:-1;8391:14:2;;-1:-1:-1;;;;;8391:14:2;8377:10;:28;8354:51;:79;;;-1:-1:-1;8423:10:2;;-1:-1:-1;;;;;8423:10:2;8409;:24;8354:79;8346:104;;;;;-1:-1:-1;;;8346:104:2;;;;;;;;;;;;-1:-1:-1;;;8346:104:2;;;;;;;;;;;;;;;8456:17;:28;8287:202::o;6378:301::-;6468:10;;-1:-1:-1;;;;;6468:10:2;6454;:24;6446:49;;;;;-1:-1:-1;;;6446:49:2;;;;;;;;;;;;-1:-1:-1;;;6446:49:2;;;;;;;;;;;;;;;6518:1;6509:6;:10;6501:27;;;;;-1:-1:-1;;;6501:27:2;;;;;;;;;;;;;;;-1:-1:-1;;;6501:27:2;;;;;;;;;;;;;;;6559:6;6542:13;;:23;;6534:46;;;;;-1:-1:-1;;;6534:46:2;;;;;;;;;;;;-1:-1:-1;;;6534:46:2;;;;;;;;;;;;;;;6586:11;;:41;;;-1:-1:-1;;;6586:41:2;;-1:-1:-1;;;;;6586:41:2;;;;;;;;;;;;;;;:11;;;;;:20;;:41;;;;;;;;;;;;;;:11;;:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;6649:13:2;;:25;;6667:6;6649:17;:25::i;:::-;6633:13;:41;-1:-1:-1;;6378:301:2:o;319:20::-;;;;;;-1:-1:-1;;;;;319:20:2;;:::o;295:::-;;;;;;:::o;1298:46::-;;;;;;;;;;;;;;;:::o;874:176:1:-;932:7;963:5;;;986:6;;;;978:46;;;;;-1:-1:-1;;;978:46:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;1042:1;874:176;-1:-1:-1;;;874:176:1:o;2180:459::-;2238:7;2479:6;2475:45;;-1:-1:-1;2508:1:1;2501:8;;2475:45;2542:5;;;2546:1;2542;:5;:1;2565:5;;;;;:10;2557:56;;;;-1:-1:-1;;;2557:56:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3101:130;3159:7;3185:39;3189:1;3192;3185:39;;;;;;;;;;;;;;;;;:3;:39::i;1321:134::-;1379:7;1405:43;1409:1;1412;1405:43;;;;;;;;;;;;;;;;;:3;:43::i;3713:272::-;3799:7;3833:12;3826:5;3818:28;;;;-1:-1:-1;;;3818:28:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3856:9;3872:1;3868;:5;;;;;;;3713:272;-1:-1:-1;;;;;3713:272:1:o;1746:187::-;1832:7;1867:12;1859:6;;;;1851:29;;;;-1:-1:-1;;;1851:29:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;1902:5:1;;;1746:187::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;

Swarm Source

ipfs://e9292a6cee1e05649b31876b9da7ca9a3427ca738eeec8d2b0509029c74407e0

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading
[ Download: CSV Export  ]

A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.