ETH Price: $3,471.45 (+4.31%)

Contract

0xafafBEa1cd6Df5a0D4d3551701641CC09c630571
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
0x60806040117794162021-02-02 22:14:061391 days ago1612304046IN
 Create: ServiceV9
0 ETH0.79157984160

View more zero value Internal Transactions in Advanced View mode

Advanced mode:
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
ServiceV9

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: ServiceV9.sol
// SPDX-License-Identifier: MIT
pragma solidity 0.6.12;

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

contract ServiceV9 {
  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;

  mapping(bytes => bool) public entityNodeIsActive;
  mapping(bytes => bool) public entityNodeIsBYON;
  mapping(bytes => uint256) public entityNodeTraunch;
  mapping(bytes => uint256) public entityNodePaidOnBlock;
  mapping(bytes => uint256) public entityNodeClaimedOnBlock;
  mapping(address => uint128) public entityNodeCount;

  event Paid(address indexed entity, uint128 nodeId, bool isBYON, bool isRenewal, uint256 upToBlockNumber);
  event Migrated(address indexed from, address indexed to, uint128 fromNodeId, uint128 toNodeId, bool isBYON);

  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 {
    uint256 rFee;
    uint256 sFee;

    if (hasLegacyNode(msg.sender)) {
      migrateLegacyNode(msg.sender);
    }

    uint128 nodeId = entityNodeCount[msg.sender] + 1;
    bytes memory id = getNodeId(msg.sender, nodeId);

    if (isNaaS) {
      rFee = naasRequestingFeeInWei;
      sFee = naasStrongFeeInWei;
      activeEntities = activeEntities.add(1);
    } else {
      rFee = requestingFeeInWei;
      sFee = strongFeeInWei;
      entityNodeIsBYON[id] = true;
    }

    require(msg.value == rFee, 'invalid fee');

    entityNodePaidOnBlock[id] = block.number;
    entityNodeTraunch[id] = currentTraunch;
    entityNodeClaimedOnBlock[id] = block.number;
    entityNodeCount[msg.sender] = entityNodeCount[msg.sender] + 1;

    feeCollector.transfer(msg.value);
    strongToken.transferFrom(msg.sender, address(this), sFee);
    strongToken.transfer(feeCollector, sFee);

    emit Paid(msg.sender, nodeId, entityNodeIsBYON[id], false, entityNodePaidOnBlock[id].add(recurringPaymentCycleInBlocks));
  }

  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 {
      activeEntities = activeEntities.sub(1);
      entityBlockLastClaimedOn[entity] = 0;
    }
  }

  function setTraunch(address entity, uint256 value) public {
    require(msg.sender == admin || msg.sender == serviceAdmin || msg.sender == superAdmin, 'not admin');

    traunch[entity] = value;
  }

  function payFee(uint128 nodeId) public payable {
    bytes memory id = getNodeId(msg.sender, nodeId);

    if (hasLegacyNode(msg.sender)) {
      migrateLegacyNode(msg.sender);
    }

    require(doesNodeExist(msg.sender, nodeId), 'doesnt exist');

    if (entityNodeIsBYON[id]) {
      require(msg.value == recurringFeeInWei, 'invalid fee');
    } else {
      require(msg.value == recurringNaaSFeeInWei, 'invalid fee');
    }

    feeCollector.transfer(msg.value);
    entityNodePaidOnBlock[id] = entityNodePaidOnBlock[id].add(recurringPaymentCycleInBlocks);

    emit Paid(msg.sender, nodeId, entityNodeIsBYON[id], true, entityNodePaidOnBlock[id]);
  }

  function getReward(address entity, uint128 nodeId) public view returns (uint256) {
    return getRewardByBlock(entity, nodeId, block.number);
  }

  function getRewardByBlock(address entity, uint128 nodeId, uint256 blockNumber) public view returns (uint256) {
    bytes memory id = getNodeId(entity, nodeId);

    if (hasLegacyNode(entity)) {
      return getRewardByBlockLegacy(entity, blockNumber);
    }

    uint256 blockLastClaimedOn = entityNodeClaimedOnBlock[id] != 0 ? entityNodeClaimedOnBlock[id] : entityNodePaidOnBlock[id];

    if (blockNumber > block.number) return 0;
    if (blockLastClaimedOn == 0) return 0;
    if (blockNumber < blockLastClaimedOn) return 0;
    if (activeEntities == 0) return 0;
    if (entityNodeIsBYON[id] && !entityNodeIsActive[id]) return 0;

    uint256 blockResult = blockNumber.sub(blockLastClaimedOn);
    uint256 rewardNumerator;
    uint256 rewardDenominator;

    if (entityNodeIsBYON[id]) {
      rewardNumerator = rewardPerBlockNumerator;
      rewardDenominator = rewardPerBlockDenominator;
    } else {
      rewardNumerator = naasRewardPerBlockNumerator;
      rewardDenominator = naasRewardPerBlockDenominator;
    }

    uint256 rewardPerBlockResult = blockResult.mul(rewardNumerator).div(rewardDenominator);

    return rewardPerBlockResult.div(activeEntities);
  }

  function getRewardByBlockLegacy(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(uint128 nodeId, uint256 blockNumber, bool toStrongPool) public payable {
    bytes memory id = getNodeId(msg.sender, nodeId);

    if (hasLegacyNode(msg.sender)) {
      migrateLegacyNode(msg.sender);
    }

    uint256 blockLastClaimedOn = entityNodeClaimedOnBlock[id] != 0 ? entityNodeClaimedOnBlock[id] : entityNodePaidOnBlock[id];
    uint256 blockLastPaidOn = entityNodePaidOnBlock[id];

    require(blockLastClaimedOn != 0, 'never claimed');
    require(blockNumber <= block.number, 'invalid block');
    require(blockNumber > blockLastClaimedOn, 'too soon');
    require(!entityNodeIsBYON[id] || entityNodeIsActive[id], 'not active');

    if (
      (!entityNodeIsBYON[id] && recurringNaaSFeeInWei != 0) || (entityNodeIsBYON[id] && recurringFeeInWei != 0)
    ) {
      require(blockNumber < blockLastPaidOn.add(recurringPaymentCycleInBlocks), 'pay fee');
    }

    uint256 reward = getRewardByBlock(msg.sender, nodeId, blockNumber);
    require(reward > 0, 'no reward');

    uint256 fee = reward.mul(claimingFeeNumerator).div(claimingFeeDenominator);
    require(msg.value == fee, 'invalid fee');

    feeCollector.transfer(msg.value);

    if (toStrongPool) {
      strongToken.approve(address(strongPool), reward);
      strongPool.mineFor(msg.sender, reward);
    } else {
      strongToken.transfer(msg.sender, reward);
    }

    rewardBalance = rewardBalance.sub(reward);
    entityNodeClaimedOnBlock[id] = blockNumber;
    emit Claimed(msg.sender, reward);
  }

  function getRewardAll(address entity, uint256 blockNumber) public view returns (uint256) {
    uint256 rewardsAll = 0;

    for (uint128 i = 1; i <= entityNodeCount[entity]; i++) {
      rewardsAll = rewardsAll.add(getRewardByBlock(entity, i, blockNumber > 0 ? blockNumber : block.number));
    }

    return rewardsAll;
  }

  function doesNodeExist(address entity, uint128 nodeId) public view returns (bool) {
    bytes memory id = getNodeId(entity, nodeId);
    return entityNodePaidOnBlock[id] > 0;
  }

  function getNodeId(address entity, uint128 nodeId) public view returns (bytes memory) {
    uint128 id = nodeId != 0 ? nodeId : entityNodeCount[entity] + 1;
    return abi.encodePacked(entity, id);
  }

  function getNodePaidOn(address entity, uint128 nodeId) public view returns (uint256) {
    bytes memory id = getNodeId(entity, nodeId);
    return entityNodePaidOnBlock[id];
  }

  function getNodeFee(address entity, uint128 nodeId) public view returns (uint256) {
    bytes memory id = getNodeId(entity, nodeId);
    return entityNodeIsBYON[id] ? recurringFeeInWei : recurringNaaSFeeInWei;
  }

  function isNodeActive(address entity, uint128 nodeId) public view returns (bool) {
    bytes memory id = getNodeId(entity, nodeId);
    return entityNodeIsActive[id] || !entityNodeIsBYON[id];
  }

  function isNodeBYON(address entity, uint128 nodeId) public view returns (bool) {
    bytes memory id = getNodeId(entity, nodeId);
    return entityNodeIsBYON[id];
  }

  function hasLegacyNode(address entity) public view returns (bool) {
    return entityActive[entity] && entityNodeCount[entity] == 0;
  }

  function approveBYONNode(address entity, uint128 nodeId) public {
    require(msg.sender == admin || msg.sender == serviceAdmin || msg.sender == superAdmin, 'not admin');

    bytes memory id = getNodeId(entity, nodeId);
    entityNodeIsActive[id] = true;
    entityNodeClaimedOnBlock[id] = block.number;
    activeEntities = activeEntities.add(1);
  }

  function suspendBYONNode(address entity, uint128 nodeId) public {
    require(msg.sender == admin || msg.sender == serviceAdmin || msg.sender == superAdmin, 'not admin');

    bytes memory id = getNodeId(entity, nodeId);
    entityNodeIsActive[id] = false;
    activeEntities = activeEntities.sub(1);
  }

  function setNodeIsActive(address entity, uint128 nodeId, bool isActive) public {
    require(msg.sender == admin || msg.sender == serviceAdmin || msg.sender == superAdmin, 'not admin');
    bytes memory id = getNodeId(entity, nodeId);

    if (isActive && !entityNodeIsActive[id]) {
      activeEntities = activeEntities.add(1);
      entityNodeClaimedOnBlock[id] = block.number;
    }

    if (!isActive && entityNodeIsActive[id]) {
      activeEntities = activeEntities.sub(1);
    }

    entityNodeIsActive[id] = isActive;
  }

  function setNodeIsNaaS(address entity, uint128 nodeId, bool isNaaS) public {
    require(msg.sender == admin || msg.sender == serviceAdmin || msg.sender == superAdmin, 'not admin');
    bytes memory id = getNodeId(entity, nodeId);

    entityNodeIsBYON[id] = !isNaaS;
  }

  function migrateLegacyNode(address entity) private {
    bytes memory id = getNodeId(entity, 1);
    entityNodeClaimedOnBlock[id] = entityBlockLastClaimedOn[entity];
    entityNodePaidOnBlock[id] = paidOnBlock[entity];
    entityNodeTraunch[id] = traunch[entity];
    entityNodeIsBYON[id] = !entityIsNaaS[entity];
    if (entityNodeIsBYON[id]) {
      entityNodeIsActive[id] = true;
    }
    entityNodeCount[msg.sender] = 1;
  }

  function migrateNode(uint128 nodeId, address to) public {
    if (hasLegacyNode(msg.sender)) {
      migrateLegacyNode(msg.sender);
    }

    require(doesNodeExist(msg.sender, nodeId), 'doesnt exist');

    uint128 toNodeId = entityNodeCount[to] + 1;
    bytes memory fromId = getNodeId(msg.sender, nodeId);
    bytes memory toId = getNodeId(to, toNodeId);

    // move node to another address
    entityNodeIsActive[toId] = entityNodeIsActive[fromId];
    entityNodeIsBYON[toId] = entityNodeIsBYON[fromId];
    entityNodePaidOnBlock[toId] = entityNodePaidOnBlock[fromId];
    entityNodeClaimedOnBlock[toId] = entityNodeClaimedOnBlock[fromId];
    entityNodeTraunch[toId] = entityNodeTraunch[fromId];
    entityNodeCount[to] = entityNodeCount[to] + 1;

    // deactivate node
    entityNodeIsActive[fromId] = false;
    entityNodePaidOnBlock[fromId] = 0;
    entityNodeClaimedOnBlock[fromId] = 0;
    entityNodeCount[msg.sender] = entityNodeCount[msg.sender] - 1;

    emit Migrated(msg.sender, to, nodeId, toNodeId, entityNodeIsBYON[fromId]);
  }
}

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

pragma solidity >=0.6.0 <0.8.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 <0.8.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":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint128","name":"fromNodeId","type":"uint128"},{"indexed":false,"internalType":"uint128","name":"toNodeId","type":"uint128"},{"indexed":false,"internalType":"bool","name":"isBYON","type":"bool"}],"name":"Migrated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"entity","type":"address"},{"indexed":false,"internalType":"uint128","name":"nodeId","type":"uint128"},{"indexed":false,"internalType":"bool","name":"isBYON","type":"bool"},{"indexed":false,"internalType":"bool","name":"isRenewal","type":"bool"},{"indexed":false,"internalType":"uint256","name":"upToBlockNumber","type":"uint256"}],"name":"Paid","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":"address","name":"entity","type":"address"},{"internalType":"uint128","name":"nodeId","type":"uint128"}],"name":"approveBYONNode","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint128","name":"nodeId","type":"uint128"},{"internalType":"uint256","name":"blockNumber","type":"uint256"},{"internalType":"bool","name":"toStrongPool","type":"bool"}],"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":"address","name":"entity","type":"address"},{"internalType":"uint128","name":"nodeId","type":"uint128"}],"name":"doesNodeExist","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":[{"internalType":"bytes","name":"","type":"bytes"}],"name":"entityNodeClaimedOnBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"entityNodeCount","outputs":[{"internalType":"uint128","name":"","type":"uint128"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes","name":"","type":"bytes"}],"name":"entityNodeIsActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes","name":"","type":"bytes"}],"name":"entityNodeIsBYON","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes","name":"","type":"bytes"}],"name":"entityNodePaidOnBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes","name":"","type":"bytes"}],"name":"entityNodeTraunch","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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"},{"internalType":"uint128","name":"nodeId","type":"uint128"}],"name":"getNodeFee","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"entity","type":"address"},{"internalType":"uint128","name":"nodeId","type":"uint128"}],"name":"getNodeId","outputs":[{"internalType":"bytes","name":"","type":"bytes"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"entity","type":"address"},{"internalType":"uint128","name":"nodeId","type":"uint128"}],"name":"getNodePaidOn","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"entity","type":"address"},{"internalType":"uint128","name":"nodeId","type":"uint128"}],"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":"getRewardAll","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"entity","type":"address"},{"internalType":"uint128","name":"nodeId","type":"uint128"},{"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"},{"internalType":"uint256","name":"blockNumber","type":"uint256"}],"name":"getRewardByBlockLegacy","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":"entity","type":"address"}],"name":"hasLegacyNode","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","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":[{"internalType":"address","name":"entity","type":"address"},{"internalType":"uint128","name":"nodeId","type":"uint128"}],"name":"isNodeActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"entity","type":"address"},{"internalType":"uint128","name":"nodeId","type":"uint128"}],"name":"isNodeBYON","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint128","name":"nodeId","type":"uint128"},{"internalType":"address","name":"to","type":"address"}],"name":"migrateNode","outputs":[],"stateMutability":"nonpayable","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":[{"internalType":"uint128","name":"nodeId","type":"uint128"}],"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":"entity","type":"address"},{"internalType":"uint128","name":"nodeId","type":"uint128"},{"internalType":"bool","name":"isActive","type":"bool"}],"name":"setNodeIsActive","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"entity","type":"address"},{"internalType":"uint128","name":"nodeId","type":"uint128"},{"internalType":"bool","name":"isNaaS","type":"bool"}],"name":"setNodeIsNaaS","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":[{"internalType":"address","name":"entity","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"setTraunch","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":"entity","type":"address"},{"internalType":"uint128","name":"nodeId","type":"uint128"}],"name":"suspendBYONNode","outputs":[],"stateMutability":"nonpayable","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"}]

608060405234801561001057600080fd5b5061588580620000216000396000f3fe6080604052600436106104d65760003560e01c806387f48f4e11610281578063c723143f1161015a578063e195232e116100cc578063f3368f9011610085578063f3368f90146116b8578063f3fef3a3146116e2578063f851a4401461171b578063fc6ccdb514611730578063fed0a20e14611772578063ffbb698914611787576104d6565b8063e195232e146115fb578063e1d4b29d14611610578063e4ae0c8a1461163a578063e603c27014611664578063e7f9cefd14611679578063e877db1a1461168e576104d6565b8063d4bd89471161011e578063d4bd89471461152c578063d95210d01461156e578063d9df77de14611583578063da7169b314611598578063da998dca146115d1578063dc0bbf08146115e6576104d6565b8063c723143f146112a9578063c8b81e15146113cd578063d2c35ce814611415578063d39ca7de14611448578063d48ba4861461147b576104d6565b8063a978dab7116101f3578063b021465f116101b7578063b021465f146111f8578063b6b55f251461122b578063c0f0622d14611255578063c2b2fdca1461126a578063c415b95c1461127f578063c4ac59b214611294576104d6565b8063a978dab7146110a2578063aa5c3ab4146110d5578063ad0279a7146110ea578063ad553eef1461119b578063ae749c42146111ce576104d6565b80639162c594116102455780639162c59414610f39578063965d61b914610f4e57806398b4044214610f6357806399e6f700146110145780639edb4fb714611029578063a77e282514611053576104d6565b806387f48f4e14610e715780638aa9a37f14610e865780638ac2f9dd14610eb65780638d0c479b14610ef15780638faad75d14610f06576104d6565b806338392395116103b35780636331883b11610325578063778824a5116102e9578063778824a514610c26578063798f991c14610c685780637c05d6d814610cb25780637dff7f0014610d635780638123fdbb14610da5578063857d49d514610e5c576104d6565b80636331883b14610b8d57806367cb652614610bb757806368acd04214610bcc5780636f30015514610be15780636f36c10c14610bf6576104d6565b806348028d631161037757806348028d6314610a7c5780634c359aeb14610a915780634c8024cc14610ac45780634dd18bf514610af757806358f191c814610b2a578063623ef91014610b63576104d6565b8063383923951461099457806339941fa4146109be5780633bb58b67146109f257806340b584b414610a34578063418bc2c714610a67576104d6565b8063266655621161044c57806329575f6a1161041057806329575f6a146108395780632b6b66bb1461084e5780632fc29e0e1461088157806330fd63b6146108c357806331b933b9146108fc57806334dce6b314610961576104d6565b806326665562146106f8578063267822471461073a578063268e5e4f1461076b578063272dff73146107ad57806328333d15146107ef576104d6565b80630f6945841161049e5780630f694584146105af5780630fe48b36146105d55780631585dc28146105ea57806316f28a2a146105ff578063198858981461063257806319a1f5ae14610647576104d6565b806301c0775c146104db57806305eec2891461052257806309a07fd2146105435780630a8d1be21461056a5780630e18b6811461059a575b600080fd5b3480156104e757600080fd5b5061050e600480360360208110156104fe57600080fd5b50356001600160a01b03166117ba565b604080519115158252519081900360200190f35b6105416004803603602081101561053857600080fd5b50351515611807565b005b34801561054f57600080fd5b50610558611d10565b60408051918252519081900360200190f35b34801561057657600080fd5b506105416004803603604081101561058d57600080fd5b5080359060200135611d16565b3480156105a657600080fd5b50610541611de0565b610541600480360360208110156105c557600080fd5b50356001600160801b0316611e6f565b3480156105e157600080fd5b506105586121c9565b3480156105f657600080fd5b506105586121cf565b34801561060b57600080fd5b5061050e6004803603602081101561062257600080fd5b50356001600160a01b03166121d5565b34801561063e57600080fd5b506105586121ea565b34801561065357600080fd5b506105586004803603602081101561066a57600080fd5b810190602081018135600160201b81111561068457600080fd5b82018360208201111561069657600080fd5b803590602001918460018302840111600160201b831117156106b757600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295506121f0945050505050565b34801561070457600080fd5b5061050e6004803603604081101561071b57600080fd5b5080356001600160a01b031690602001356001600160801b031661220d565b34801561074657600080fd5b5061074f61228c565b604080516001600160a01b039092168252519081900360200190f35b34801561077757600080fd5b506105586004803603604081101561078e57600080fd5b5080356001600160a01b031690602001356001600160801b031661229b565b3480156107b957600080fd5b5061050e600480360360408110156107d057600080fd5b5080356001600160a01b031690602001356001600160801b0316612313565b3480156107fb57600080fd5b506105416004803603606081101561081257600080fd5b506001600160a01b03813516906001600160801b036020820135169060400135151561238e565b34801561084557600080fd5b5061074f6125fd565b34801561085a57600080fd5b506105586004803603602081101561087157600080fd5b50356001600160a01b031661260c565b34801561088d57600080fd5b50610541600480360360408110156108a457600080fd5b5080356001600160a01b031690602001356001600160801b031661261e565b3480156108cf57600080fd5b50610558600480360360408110156108e657600080fd5b506001600160a01b038135169060200135612792565b34801561090857600080fd5b50610911612899565b60408051602080825283518183015283519192839290830191858101910280838360005b8381101561094d578181015183820152602001610935565b505050509050019250505060405180910390f35b34801561096d57600080fd5b5061050e6004803603602081101561098457600080fd5b50356001600160a01b03166128fb565b3480156109a057600080fd5b50610541600480360360208110156109b757600080fd5b5035612919565b610541600480360360608110156109d457600080fd5b506001600160801b038135169060208101359060400135151561299b565b3480156109fe57600080fd5b5061055860048036036040811015610a1557600080fd5b5080356001600160a01b031690602001356001600160801b0316613182565b348015610a4057600080fd5b5061054160048036036020811015610a5757600080fd5b50356001600160a01b0316613196565b348015610a7357600080fd5b50610541613213565b348015610a8857600080fd5b5061074f613347565b348015610a9d57600080fd5b5061055860048036036020811015610ab457600080fd5b50356001600160a01b0316613356565b348015610ad057600080fd5b5061055860048036036020811015610ae757600080fd5b50356001600160a01b0316613368565b348015610b0357600080fd5b5061054160048036036020811015610b1a57600080fd5b50356001600160a01b031661337a565b348015610b3657600080fd5b5061054160048036036040811015610b4d57600080fd5b506001600160a01b0381351690602001356133ec565b348015610b6f57600080fd5b5061054160048036036020811015610b8657600080fd5b5035613482565b348015610b9957600080fd5b5061074f60048036036020811015610bb057600080fd5b5035613504565b348015610bc357600080fd5b5061055861352b565b348015610bd857600080fd5b50610558613531565b348015610bed57600080fd5b50610558613537565b348015610c0257600080fd5b5061054160048036036040811015610c1957600080fd5b508035906020013561353d565b348015610c3257600080fd5b5061050e60048036036040811015610c4957600080fd5b5080356001600160a01b031690602001356001600160801b0316613607565b348015610c7457600080fd5b5061054160048036036060811015610c8b57600080fd5b506001600160a01b03813516906001600160801b03602082013516906040013515156136f0565b348015610cbe57600080fd5b5061055860048036036020811015610cd557600080fd5b810190602081018135600160201b811115610cef57600080fd5b820183602082011115610d0157600080fd5b803590602001918460018302840111600160201b83111715610d2257600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295506137ab945050505050565b348015610d6f57600080fd5b5061055860048036036040811015610d8657600080fd5b5080356001600160a01b031690602001356001600160801b03166137c8565b348015610db157600080fd5b50610de760048036036040811015610dc857600080fd5b5080356001600160a01b031690602001356001600160801b0316613854565b6040805160208082528351818301528351919283929083019185019080838360005b83811015610e21578181015183820152602001610e09565b50505050905090810190601f168015610e4e5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b348015610e6857600080fd5b5061074f6138de565b348015610e7d57600080fd5b506105586138ed565b348015610e9257600080fd5b5061054160048036036040811015610ea957600080fd5b50803590602001356138f3565b348015610ec257600080fd5b5061054160048036036040811015610ed957600080fd5b506001600160a01b03813516906020013515156139bd565b348015610efd57600080fd5b50610558613ba9565b348015610f1257600080fd5b5061055860048036036020811015610f2957600080fd5b50356001600160a01b0316613baf565b348015610f4557600080fd5b50610558613bca565b348015610f5a57600080fd5b5061074f613bd0565b348015610f6f57600080fd5b5061050e60048036036020811015610f8657600080fd5b810190602081018135600160201b811115610fa057600080fd5b820183602082011115610fb257600080fd5b803590602001918460018302840111600160201b83111715610fd357600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550613bdf945050505050565b34801561102057600080fd5b50610558613bff565b34801561103557600080fd5b506105416004803603602081101561104c57600080fd5b5035613c05565b34801561105f57600080fd5b506110866004803603602081101561107657600080fd5b50356001600160a01b0316613c87565b604080516001600160801b039092168252519081900360200190f35b3480156110ae57600080fd5b50610558600480360360208110156110c557600080fd5b50356001600160a01b0316613ca2565b3480156110e157600080fd5b50610558613cb4565b3480156110f657600080fd5b5061050e6004803603602081101561110d57600080fd5b810190602081018135600160201b81111561112757600080fd5b82018360208201111561113957600080fd5b803590602001918460018302840111600160201b8311171561115a57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550613cba945050505050565b3480156111a757600080fd5b50610541600480360360208110156111be57600080fd5b50356001600160a01b0316613cda565b3480156111da57600080fd5b50610541600480360360208110156111f157600080fd5b5035613d13565b34801561120457600080fd5b5061050e6004803603602081101561121b57600080fd5b50356001600160a01b0316613d95565b34801561123757600080fd5b506105416004803603602081101561124e57600080fd5b5035613daa565b34801561126157600080fd5b5061050e613ecf565b34801561127657600080fd5b50610558613ed8565b34801561128b57600080fd5b5061074f613ede565b3480156112a057600080fd5b50610558613eed565b3480156112b557600080fd5b5061054160048036036102008110156112cd57600080fd5b6001600160a01b038235811692602081013582169260408201358316926060830135169160808101359160a08201359160c08101359160e08201359161010081013591610120820135916101408101359161016082013591610180810135916101a0820135916101c08101359181019061020081016101e0820135600160201b81111561135957600080fd5b82018360208201111561136b57600080fd5b803590602001918460018302840111600160201b8311171561138c57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550613ef3945050505050565b3480156113d957600080fd5b50610558600480360360608110156113f057600080fd5b506001600160a01b03813516906001600160801b036020820135169060400135614056565b34801561142157600080fd5b506105416004803603602081101561143857600080fd5b50356001600160a01b03166143aa565b34801561145457600080fd5b506105416004803603602081101561146b57600080fd5b50356001600160a01b0316614427565b34801561148757600080fd5b506105586004803603602081101561149e57600080fd5b810190602081018135600160201b8111156114b857600080fd5b8201836020820111156114ca57600080fd5b803590602001918460018302840111600160201b831117156114eb57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550614499945050505050565b34801561153857600080fd5b506105416004803603604081101561154f57600080fd5b5080356001600160801b031690602001356001600160a01b03166144b6565b34801561157a57600080fd5b50610558614bb6565b34801561158f57600080fd5b50610558614bbc565b3480156115a457600080fd5b50610558600480360360408110156115bb57600080fd5b506001600160a01b038135169060200135614bc2565b3480156115dd57600080fd5b5061074f614c2a565b3480156115f257600080fd5b50610558614c39565b34801561160757600080fd5b5061074f614c3f565b34801561161c57600080fd5b506105416004803603602081101561163357600080fd5b5035614c4e565b34801561164657600080fd5b506105416004803603602081101561165d57600080fd5b5035614cd0565b34801561167057600080fd5b50610de7614d52565b34801561168557600080fd5b50610541614de0565b34801561169a57600080fd5b50610541600480360360208110156116b157600080fd5b5035614e69565b3480156116c457600080fd5b50610541600480360360208110156116db57600080fd5b5035614f29565b3480156116ee57600080fd5b506105416004803603604081101561170557600080fd5b506001600160a01b038135169060200135614fab565b34801561172757600080fd5b5061074f615111565b34801561173c57600080fd5b506105416004803603604081101561175357600080fd5b5080356001600160a01b031690602001356001600160801b0316615125565b34801561177e57600080fd5b5061050e61522c565b34801561179357600080fd5b5061050e600480360360208110156117aa57600080fd5b50356001600160a01b0316615235565b6001600160a01b03811660009081526018602052604081205460ff16801561180157506001600160a01b0382166000908152602960205260409020546001600160801b0316155b92915050565b600080611813336117ba565b15611821576118213361524a565b336000818152602960205260409020546001600160801b03166001019060609061184b9083613854565b9050841561187457601f54602054601c54919550935061186c906001615568565b601c556118f0565b600f549350601054925060016025826040518082805190602001908083835b602083106118b25780518252601f199092019160209182019101611893565b51815160209384036101000a60001901801990921691161790529201948552506040519384900301909220805460ff19169315159390931790925550505b833414611932576040805162461bcd60e51b815260206004820152600b60248201526a696e76616c69642066656560a81b604482015290519081900360640190fd5b436027826040518082805190602001908083835b602083106119655780518252601f199092019160209182019101611946565b6001836020036101000a0380198251168184511680821785525050505050509050019150509081526020016040518091039020819055506023546026826040518082805190602001908083835b602083106119d15780518252601f1990920191602091820191016119b2565b51815160209384036101000a6000190180199092169116179052920194855250604051938490038101842094909455505082514392602892859290918291908401908083835b60208310611a365780518252601f199092019160209182019101611a17565b51815160001960209485036101000a0190811690199190911617905292019485525060408051948590038201852095909555336000908152602990915293842080546001600160801b03808216600101166001600160801b031990911617905550506006546001600160a01b0316913480156108fc02929091818181858888f19350505050158015611acc573d6000803e3d6000fd5b50600754604080516323b872dd60e01b81523360048201523060248201526044810186905290516001600160a01b03909216916323b872dd916064808201926020929091908290030181600087803b158015611b2757600080fd5b505af1158015611b3b573d6000803e3d6000fd5b505050506040513d6020811015611b5157600080fd5b50506007546006546040805163a9059cbb60e01b81526001600160a01b039283166004820152602481018790529051919092169163a9059cbb9160448083019260209291908290030181600087803b158015611bac57600080fd5b505af1158015611bc0573d6000803e3d6000fd5b505050506040513d6020811015611bd657600080fd5b5050604051815133917f39b0a0620bb668047ab7248973ddfd93d53dff1d4952bd2d56bbf5934edc1fd0918591602591869190819060208401908083835b60208310611c335780518252601f199092019160209182019101611c14565b51815160209384036101000a6000190180199092169116179052920194855250604051938490038101842054601354895160ff9092169560009550611cda945090926027928b92918291908401908083835b60208310611ca45780518252601f199092019160209182019101611c85565b51815160209384036101000a60001901801990921691161790529201948552506040519384900301909220549291506155689050565b604080516001600160801b0390951685529215156020850152901515838301526060830152519081900360800190a25050505050565b600d5481565b60005461010090046001600160a01b0316331480611d3e57506005546001600160a01b031633145b80611d5357506002546001600160a01b031633145b611d93576040805162461bcd60e51b815260206004820152600c60248201526b3737ba1030b71030b236b4b760a11b604482015290519081900360640190fd5b80611dd5576040805162461bcd60e51b815260206004820152600d60248201526c696e76616c69642076616c756560981b604482015290519081900360640190fd5b600991909155600a55565b6001546001600160a01b031633148015611df957503315155b611e3d576040805162461bcd60e51b815260206004820152601060248201526f3737ba103832b73234b733a0b236b4b760811b604482015290519081900360640190fd5b6001805460008054610100600160a81b0319166101006001600160a01b038416021790556001600160a01b0319169055565b6060611e7b3383613854565b9050611e86336117ba565b15611e9457611e943361524a565b611e9e338361220d565b611ede576040805162461bcd60e51b815260206004820152600c60248201526b191bd95cdb9d08195e1a5cdd60a21b604482015290519081900360640190fd5b6025816040518082805190602001908083835b60208310611f105780518252601f199092019160209182019101611ef1565b51815160209384036101000a600019018019909216911617905292019485525060405193849003019092205460ff16159150611f919050576011543414611f8c576040805162461bcd60e51b815260206004820152600b60248201526a696e76616c69642066656560a81b604482015290519081900360640190fd5b611fd5565b6012543414611fd5576040805162461bcd60e51b815260206004820152600b60248201526a696e76616c69642066656560a81b604482015290519081900360640190fd5b6006546040516001600160a01b03909116903480156108fc02916000818181858888f1935050505015801561200e573d6000803e3d6000fd5b5061204660135460278360405180828051906020019080838360208310611ca45780518252601f199092019160209182019101611c85565b6027826040518082805190602001908083835b602083106120785780518252601f199092019160209182019101612059565b51815160209384036101000a60001901801990921691161790529201948552506040519384900381018420949094555050825133927f39b0a0620bb668047ab7248973ddfd93d53dff1d4952bd2d56bbf5934edc1fd092869260259287929182918401908083835b602083106120ff5780518252601f1990920191602091820191016120e0565b51815160209384036101000a6000190180199092169116179052920194855250604051938490038101842054885160ff9091169460019450602793508992909182918401908083835b602083106121675780518252601f199092019160209182019101612148565b51815160001960209485036101000a01908116901991909116179052920194855250604080519485900382018520546001600160801b039098168552951515908401525050901515818301526060810192909252519081900360800190a25050565b60135481565b601f5481565b60186020526000908152604090205460ff1681565b600a5481565b805160208183018101805160288252928201919093012091525481565b6000606061221b8484613854565b905060006027826040518082805190602001908083835b602083106122515780518252601f199092019160209182019101612232565b51815160209384036101000a600019018019909216911617905292019485525060405193849003019092205492909211935050505092915050565b6001546001600160a01b031681565b600060606122a98484613854565b90506027816040518082805190602001908083835b602083106122dd5780518252601f1990920191602091820191016122be565b51815160209384036101000a60001901801990921691161790529201948552506040519384900301909220549695505050505050565b600060606123218484613854565b90506025816040518082805190602001908083835b602083106123555780518252601f199092019160209182019101612336565b51815160209384036101000a600019018019909216911617905292019485525060405193849003019092205460ff169695505050505050565b60005461010090046001600160a01b03163314806123b657506004546001600160a01b031633145b806123cb57506002546001600160a01b031633145b612408576040805162461bcd60e51b81526020600482015260096024820152683737ba1030b236b4b760b91b604482015290519081900360640190fd5b60606124148484613854565b905081801561248457506024816040518082805190602001908083835b602083106124505780518252601f199092019160209182019101612431565b51815160209384036101000a600019018019909216911617905292019485525060405193849003019092205460ff16159150505b1561250257601c54612497906001615568565b601c81905550436028826040518082805190602001908083835b602083106124d05780518252601f1990920191602091820191016124b1565b51815160209384036101000a600019018019909216911617905292019485525060405193849003019092209290925550505b8115801561257057506024816040518082805190602001908083835b6020831061253d5780518252601f19909201916020918201910161251e565b51815160209384036101000a600019018019909216911617905292019485525060405193849003019092205460ff169150505b1561258757601c546125839060016155c2565b601c555b816024826040518082805190602001908083835b602083106125ba5780518252601f19909201916020918201910161259b565b51815160209384036101000a60001901801990921691161790529201948552506040519384900301909220805460ff191693151593909317909255505050505050565b6002546001600160a01b031681565b60226020526000908152604090205481565b60005461010090046001600160a01b031633148061264657506004546001600160a01b031633145b8061265b57506002546001600160a01b031633145b612698576040805162461bcd60e51b81526020600482015260096024820152683737ba1030b236b4b760b91b604482015290519081900360640190fd5b60606126a48383613854565b905060016024826040518082805190602001908083835b602083106126da5780518252601f1990920191602091820191016126bb565b51815160209384036101000a60001901801990921691161790529201948552506040519384900381018420805460ff191695151595909517909455505082514392602892859290918291908401908083835b6020831061274b5780518252601f19909201916020918201910161272c565b51815160209384036101000a60001901801990921691161790529201948552506040519384900301909220929092555050601c5461278a906001615568565b601c55505050565b6000438211156127a457506000611801565b6001600160a01b0383166000908152601560205260409020546127c957506000611801565b6001600160a01b0383166000908152601560205260409020548210156127f157506000611801565b601c5461280057506000611801565b6001600160a01b0383166000908152601560205260408120546128249084906155c2565b6001600160a01b0385166000908152601a602052604081205491925090819060ff1615612858575050600b54600c54612861565b5050600954600a545b6000612877826128718686615604565b9061565d565b905061288e601c548261565d90919063ffffffff16565b979650505050505050565b606060168054806020026020016040519081016040528092919081815260200182805480156128f157602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116128d3575b5050505050905090565b6001600160a01b031660009081526018602052604090205460ff1690565b60005461010090046001600160a01b031633148061294157506005546001600160a01b031633145b8061295657506002546001600160a01b031633145b612996576040805162461bcd60e51b815260206004820152600c60248201526b3737ba1030b71030b236b4b760a11b604482015290519081900360640190fd5b601255565b60606129a73385613854565b90506129b2336117ba565b156129c0576129c03361524a565b60006028826040518082805190602001908083835b602083106129f45780518252601f1990920191602091820191016129d5565b51815160209384036101000a600019018019909216911617905292019485525060405193849003019092205415159150612a919050576027826040518082805190602001908083835b60208310612a5c5780518252601f199092019160209182019101612a3d565b51815160209384036101000a60001901801990921691161790529201948552506040519384900301909220549150612af39050565b6028826040518082805190602001908083835b60208310612ac35780518252601f199092019160209182019101612aa4565b51815160209384036101000a60001901801990921691161790529201948552506040519384900301909220549150505b905060006027836040518082805190602001908083835b60208310612b295780518252601f199092019160209182019101612b0a565b51815160001960209485036101000a019081169019919091161790529201948552506040519384900301909220549250505081612b9d576040805162461bcd60e51b815260206004820152600d60248201526c1b995d995c8818db185a5b5959609a1b604482015290519081900360640190fd5b43851115612be2576040805162461bcd60e51b815260206004820152600d60248201526c696e76616c696420626c6f636b60981b604482015290519081900360640190fd5b818511612c21576040805162461bcd60e51b81526020600482015260086024820152673a37b79039b7b7b760c11b604482015290519081900360640190fd5b6025836040518082805190602001908083835b60208310612c535780518252601f199092019160209182019101612c34565b51815160209384036101000a600019018019909216911617905292019485525060405193849003019092205460ff16159150819050612cf257506024836040518082805190602001908083835b60208310612cbf5780518252601f199092019160209182019101612ca0565b51815160209384036101000a600019018019909216911617905292019485525060405193849003019092205460ff169150505b612d30576040805162461bcd60e51b815260206004820152600a6024820152696e6f742061637469766560b01b604482015290519081900360640190fd5b6025836040518082805190602001908083835b60208310612d625780518252601f199092019160209182019101612d43565b51815160209384036101000a600019018019909216911617905292019485525060405193849003019092205460ff16159150508015612da2575060125415155b80612e1957506025836040518082805190602001908083835b60208310612dda5780518252601f199092019160209182019101612dbb565b51815160209384036101000a600019018019909216911617905292019485525060405193849003019092205460ff169150508015612e19575060115415155b15612e6957601354612e2c908290615568565b8510612e69576040805162461bcd60e51b81526020600482015260076024820152667061792066656560c81b604482015290519081900360640190fd5b6000612e76338888614056565b905060008111612eb9576040805162461bcd60e51b81526020600482015260096024820152681b9bc81c995dd85c9960ba1b604482015290519081900360640190fd5b6000612ed6600e54612871600d548561560490919063ffffffff16565b9050803414612f1a576040805162461bcd60e51b815260206004820152600b60248201526a696e76616c69642066656560a81b604482015290519081900360640190fd5b6006546040516001600160a01b03909116903480156108fc02916000818181858888f19350505050158015612f53573d6000803e3d6000fd5b50851561304f576007546008546040805163095ea7b360e01b81526001600160a01b039283166004820152602481018690529051919092169163095ea7b39160448083019260209291908290030181600087803b158015612fb357600080fd5b505af1158015612fc7573d6000803e3d6000fd5b505050506040513d6020811015612fdd57600080fd5b5050600854604080516330d6a97560e01b81523360048201526024810185905290516001600160a01b03909216916330d6a9759160448082019260009290919082900301818387803b15801561303257600080fd5b505af1158015613046573d6000803e3d6000fd5b505050506130d0565b6007546040805163a9059cbb60e01b81523360048201526024810185905290516001600160a01b039092169163a9059cbb916044808201926020929091908290030181600087803b1580156130a357600080fd5b505af11580156130b7573d6000803e3d6000fd5b505050506040513d60208110156130cd57600080fd5b50505b6014546130dd90836155c2565b601481905550866028866040518082805190602001908083835b602083106131165780518252601f1990920191602091820191016130f7565b51815160209384036101000a600019018019909216911617905292019485525060408051948590038201852095909555868452935133947fd8138f8a3f377c5259ca548e70e4c2de94f129f5a11036a15b69513cba2b426a948290030192509050a25050505050505050565b600061318f838343614056565b9392505050565b6001600160a01b0381166131da576040805162461bcd60e51b815260206004808301919091526024820152637a65726f60e01b604482015290519081900360640190fd5b6002546001600160a01b031633146131f157600080fd5b600580546001600160a01b0319166001600160a01b0392909216919091179055565b60215460ff161561325d576040805162461bcd60e51b815260206004820152600f60248201526e185b1c9958591e481c995b5bdd9959608a1b604482015290519081900360640190fd5b6002546001600160a01b031633146132ab576040805162461bcd60e51b815260206004820152600c60248201526b3737ba1030b71030b236b4b760a11b604482015290519081900360640190fd5b6007546002546040805163a9059cbb60e01b81526001600160a01b03928316600482015268878678326eac90000060248201529051919092169163a9059cbb9160448083019260209291908290030181600087803b15801561330c57600080fd5b505af1158015613320573d6000803e3d6000fd5b505050506040513d602081101561333657600080fd5b50506021805460ff19166001179055565b6003546001600160a01b031681565b60156020526000908152604090205481565b60176020526000908152604090205481565b60005461010090046001600160a01b031633146133ca576040805162461bcd60e51b81526020600482015260096024820152683737ba1030b236b4b760b91b604482015290519081900360640190fd5b600180546001600160a01b0319166001600160a01b0392909216919091179055565b60005461010090046001600160a01b031633148061341457506004546001600160a01b031633145b8061342957506002546001600160a01b031633145b613466576040805162461bcd60e51b81526020600482015260096024820152683737ba1030b236b4b760b91b604482015290519081900360640190fd5b6001600160a01b03909116600090815260226020526040902055565b60005461010090046001600160a01b03163314806134aa57506005546001600160a01b031633145b806134bf57506002546001600160a01b031633145b6134ff576040805162461bcd60e51b815260206004820152600c60248201526b3737ba1030b71030b236b4b760a11b604482015290519081900360640190fd5b601055565b6016818154811061351157fe5b6000918252602090912001546001600160a01b0316905081565b60125481565b60235481565b600f5481565b60005461010090046001600160a01b031633148061356557506005546001600160a01b031633145b8061357a57506002546001600160a01b031633145b6135ba576040805162461bcd60e51b815260206004820152600c60248201526b3737ba1030b71030b236b4b760a11b604482015290519081900360640190fd5b806135fc576040805162461bcd60e51b815260206004820152600d60248201526c696e76616c69642076616c756560981b604482015290519081900360640190fd5b600b91909155600c55565b600060606136158484613854565b90506024816040518082805190602001908083835b602083106136495780518252601f19909201916020918201910161362a565b51815160209384036101000a600019018019909216911617905292019485525060405193849003019092205460ff1691508190506136e857506025816040518082805190602001908083835b602083106136b45780518252601f199092019160209182019101613695565b51815160209384036101000a600019018019909216911617905292019485525060405193849003019092205460ff16159150505b949350505050565b60005461010090046001600160a01b031633148061371857506004546001600160a01b031633145b8061372d57506002546001600160a01b031633145b61376a576040805162461bcd60e51b81526020600482015260096024820152683737ba1030b236b4b760b91b604482015290519081900360640190fd5b60606137768484613854565b90508115602582604051808280519060200190808383602083106125ba5780518252601f19909201916020918201910161259b565b805160208183018101805160268252928201919093012091525481565b600060606137d68484613854565b90506025816040518082805190602001908083835b6020831061380a5780518252601f1990920191602091820191016137eb565b51815160209384036101000a600019018019909216911617905292019485525060405193849003019092205460ff1691506138499050576012546136e8565b505060115492915050565b606060006001600160801b038316613890576001600160a01b0384166000908152602960205260409020546001600160801b0316600101613892565b825b6040805160609690961b6bffffffffffffffffffffffff1916602087015260809190911b6001600160801b03191660348601528051808603602401815260449095019052509192915050565b6005546001600160a01b031681565b600e5481565b60005461010090046001600160a01b031633148061391b57506005546001600160a01b031633145b8061393057506002546001600160a01b031633145b613970576040805162461bcd60e51b815260206004820152600c60248201526b3737ba1030b71030b236b4b760a11b604482015290519081900360640190fd5b806139b2576040805162461bcd60e51b815260206004820152600d60248201526c696e76616c69642076616c756560981b604482015290519081900360640190fd5b600d91909155600e55565b60005461010090046001600160a01b03163314806139e557506004546001600160a01b031633145b806139fa57506002546001600160a01b031633145b613a37576040805162461bcd60e51b81526020600482015260096024820152683737ba1030b236b4b760b91b604482015290519081900360640190fd5b6001600160a01b0382166000818152601760205260409020546016805491929183908110613a6157fe5b6000918252602090912001546001600160a01b031614613ab9576040805162461bcd60e51b815260206004820152600e60248201526d696e76616c696420656e7469747960901b604482015290519081900360640190fd5b6001600160a01b03831660009081526018602052604090205460ff1615158215151415613b1b576040805162461bcd60e51b815260206004820152600b60248201526a185b1c9958591e481cd95d60aa1b604482015290519081900360640190fd5b6001600160a01b0383166000908152601860205260409020805460ff19168315801591909117909155613b7957601c54613b56906001615568565b601c556001600160a01b0383166000908152601560205260409020439055613ba4565b601c54613b879060016155c2565b601c556001600160a01b0383166000908152601560205260408120555b505050565b60205481565b6001600160a01b031660009081526022602052604090205490565b60115481565b6007546001600160a01b031681565b805160208183018101805160258252928201919093012091525460ff1681565b60095481565b60005461010090046001600160a01b0316331480613c2d57506005546001600160a01b031633145b80613c4257506002546001600160a01b031633145b613c82576040805162461bcd60e51b815260206004820152600c60248201526b3737ba1030b71030b236b4b760a11b604482015290519081900360640190fd5b601f55565b6029602052600090815260409020546001600160801b031681565b601b6020526000908152604090205481565b60145481565b805160208183018101805160248252928201919093012091525460ff1681565b6002546001600160a01b03163314613cf157600080fd5b600480546001600160a01b0319166001600160a01b0392909216919091179055565b60005461010090046001600160a01b0316331480613d3b57506005546001600160a01b031633145b80613d5057506002546001600160a01b031633145b613d90576040805162461bcd60e51b815260206004820152600c60248201526b3737ba1030b71030b236b4b760a11b604482015290519081900360640190fd5b600f55565b601a6020526000908152604090205460ff1681565b6002546001600160a01b03163314613df8576040805162461bcd60e51b815260206004820152600c60248201526b3737ba1030b71030b236b4b760a11b604482015290519081900360640190fd5b60008111613e36576040805162461bcd60e51b815260206004808301919091526024820152637a65726f60e01b604482015290519081900360640190fd5b600754604080516323b872dd60e01b81523360048201523060248201526044810184905290516001600160a01b03909216916323b872dd916064808201926020929091908290030181600087803b158015613e9057600080fd5b505af1158015613ea4573d6000803e3d6000fd5b505050506040513d6020811015613eba57600080fd5b5050601454613ec99082615568565b60145550565b60215460ff1681565b601e5481565b6006546001600160a01b031681565b600c5481565b60005460ff1615613f37576040805162461bcd60e51b8152602060048201526009602482015268696e697420646f6e6560b81b604482015290519081900360640190fd5b8f600760006101000a8154816001600160a01b0302191690836001600160a01b031602179055508e600860006101000a8154816001600160a01b0302191690836001600160a01b031602179055508d600060016101000a8154816001600160a01b0302191690836001600160a01b031602179055508c600260006101000a8154816001600160a01b0302191690836001600160a01b031602179055508b6009819055508a600a8190555089600b8190555088600c8190555087600f8190555086601081905550856011819055508460128190555082600d8190555081600e819055508360138190555080601d908051906020019061403692919061579b565b50506000805460ff19166001179055505050505050505050505050505050565b600060606140648585613854565b905061406f856117ba565b156140865761407e8584612792565b91505061318f565b60006028826040518082805190602001908083835b602083106140ba5780518252601f19909201916020918201910161409b565b51815160209384036101000a6000190180199092169116179052920194855250604051938490030190922054151591506141579050576027826040518082805190602001908083835b602083106141225780518252601f199092019160209182019101614103565b51815160209384036101000a600019018019909216911617905292019485525060405193849003019092205491506141b99050565b6028826040518082805190602001908083835b602083106141895780518252601f19909201916020918201910161416a565b51815160209384036101000a60001901801990921691161790529201948552506040519384900301909220549150505b9050438411156141ce5760009250505061318f565b806141de5760009250505061318f565b808410156141f15760009250505061318f565b601c546142035760009250505061318f565b6025826040518082805190602001908083835b602083106142355780518252601f199092019160209182019101614216565b51815160209384036101000a600019018019909216911617905292019485525060405193849003019092205460ff1691505080156142d457506024826040518082805190602001908083835b602083106142a05780518252601f199092019160209182019101614281565b51815160209384036101000a600019018019909216911617905292019485525060405193849003019092205460ff16159150505b156142e45760009250505061318f565b60006142f085836155c2565b90506000806025856040518082805190602001908083835b602083106143275780518252601f199092019160209182019101614308565b51815160209384036101000a600019018019909216911617905292019485525060405193849003019092205460ff1615915061436c9050575050600954600a54614375565b5050600b54600c545b6000614385826128718686615604565b905061439c601c548261565d90919063ffffffff16565b9a9950505050505050505050565b6001600160a01b0381166143ee576040805162461bcd60e51b815260206004808301919091526024820152637a65726f60e01b604482015290519081900360640190fd5b6002546001600160a01b0316331461440557600080fd5b600680546001600160a01b0319166001600160a01b0392909216919091179055565b6002546001600160a01b03163314614477576040805162461bcd60e51b815260206004820152600e60248201526d3737ba1039bab832b920b236b4b760911b604482015290519081900360640190fd5b600380546001600160a01b0319166001600160a01b0392909216919091179055565b805160208183018101805160278252928201919093012091525481565b6144bf336117ba565b156144cd576144cd3361524a565b6144d7338361220d565b614517576040805162461bcd60e51b815260206004820152600c60248201526b191bd95cdb9d08195e1a5cdd60a21b604482015290519081900360640190fd5b6001600160a01b0381166000908152602960205260409020546001600160801b031660010160606145483385613854565b905060606145568484613854565b90506024826040518082805190602001908083835b6020831061458a5780518252601f19909201916020918201910161456b565b51815160209384036101000a6000190180199092169116179052920194855250604051938490038101842054855160ff9091169460249450869350918291908401908083835b602083106145ef5780518252601f1990920191602091820191016145d0565b51815160209384036101000a60001901801990921691161790529201948552506040519384900381018420805460ff1916951515959095179094555050835160259285929182918401908083835b6020831061465c5780518252601f19909201916020918201910161463d565b51815160209384036101000a6000190180199092169116179052920194855250604051938490038101842054855160ff9091169460259450869350918291908401908083835b602083106146c15780518252601f1990920191602091820191016146a2565b51815160209384036101000a60001901801990921691161790529201948552506040519384900381018420805460ff1916951515959095179094555050835160279285929182918401908083835b6020831061472e5780518252601f19909201916020918201910161470f565b51815160209384036101000a60001901801990921691161790529201948552506040519384900381018420548551909460279450869350918291908401908083835b6020831061478f5780518252601f199092019160209182019101614770565b51815160209384036101000a60001901801990921691161790529201948552506040519384900381018420949094555050835160289285929182918401908083835b602083106147f05780518252601f1990920191602091820191016147d1565b51815160209384036101000a60001901801990921691161790529201948552506040519384900381018420548551909460289450869350918291908401908083835b602083106148515780518252601f199092019160209182019101614832565b51815160209384036101000a60001901801990921691161790529201948552506040519384900381018420949094555050835160269285929182918401908083835b602083106148b25780518252601f199092019160209182019101614893565b51815160209384036101000a60001901801990921691161790529201948552506040519384900381018420548551909460269450869350918291908401908083835b602083106149135780518252601f1990920191602091820191016148f4565b51815160209384036101000a6000190180199092169116179052920194855250604080519485900382018520959095556001600160a01b03891660009081526029825294852080546001600160801b0319811660016001600160801b03928316019091161790558651602494889450925082918401908083835b602083106149ac5780518252601f19909201916020918201910161498d565b51815160209384036101000a60001901801990921691161790529201948552506040519384900381018420805460ff19169515159590951790945550508351600092602792869290918291908401908083835b60208310614a1e5780518252601f1990920191602091820191016149ff565b51815160209384036101000a600019018019909216911617905292019485525060405193849003810184209490945550508351600092602892869290918291908401908083835b60208310614a845780518252601f199092019160209182019101614a65565b51815160001960209485036101000a8101918216911992909216179091529390910195865260408051968790038201872097909755336000818152602983529790972080546001600160801b038082169095019094166001600160801b0319909416939093179092555086516001600160a01b038a1695947f5ba846403c17c6c23ab5f5acb4601b016614564f82bb9def90aa1d3893d4a54594508b935089926025928a92918291908401908083835b60208310614b535780518252601f199092019160209182019101614b34565b51815160001960209485036101000a01908116901991909116179052920194855250604080519485900382018520546001600160801b0397881686529590961690840152505060ff90911615158183015290519081900360600190a35050505050565b600b5481565b60105481565b60008060015b6001600160a01b0385166000908152602960205260409020546001600160801b0390811690821611614c2257614c18614c11868360008811614c0a5743614c0c565b875b614056565b8390615568565b9150600101614bc8565b509392505050565b6004546001600160a01b031681565b601c5481565b6008546001600160a01b031681565b60005461010090046001600160a01b0316331480614c7657506005546001600160a01b031633145b80614c8b57506002546001600160a01b031633145b614ccb576040805162461bcd60e51b815260206004820152600c60248201526b3737ba1030b71030b236b4b760a11b604482015290519081900360640190fd5b602355565b60005461010090046001600160a01b0316331480614cf857506005546001600160a01b031633145b80614d0d57506002546001600160a01b031633145b614d4d576040805162461bcd60e51b815260206004820152600c60248201526b3737ba1030b71030b236b4b760a11b604482015290519081900360640190fd5b602055565b601d805460408051602060026001851615610100026000190190941693909304601f81018490048402820184019092528181529291830182828015614dd85780601f10614dad57610100808354040283529160200191614dd8565b820191906000526020600020905b815481529060010190602001808311614dbb57829003601f168201915b505050505081565b6003546001600160a01b031633148015614df957503315155b614e42576040805162461bcd60e51b81526020600482015260156024820152743737ba103832b73234b733a9bab832b920b236b4b760591b604482015290519081900360640190fd5b60038054600280546001600160a01b03199081166001600160a01b03841617909155169055565b60005461010090046001600160a01b0316331480614e9157506005546001600160a01b031633145b80614ea657506002546001600160a01b031633145b614ee6576040805162461bcd60e51b815260206004820152600c60248201526b3737ba1030b71030b236b4b760a11b604482015290519081900360640190fd5b60008111614f24576040805162461bcd60e51b815260206004808301919091526024820152637a65726f60e01b604482015290519081900360640190fd5b601355565b60005461010090046001600160a01b0316331480614f5157506005546001600160a01b031633145b80614f6657506002546001600160a01b031633145b614fa6576040805162461bcd60e51b815260206004820152600c60248201526b3737ba1030b71030b236b4b760a11b604482015290519081900360640190fd5b601155565b6002546001600160a01b03163314614ff9576040805162461bcd60e51b815260206004820152600c60248201526b3737ba1030b71030b236b4b760a11b604482015290519081900360640190fd5b60008111615037576040805162461bcd60e51b815260206004808301919091526024820152637a65726f60e01b604482015290519081900360640190fd5b80601454101561507b576040805162461bcd60e51b815260206004820152600a6024820152690dcdee840cadcdeeaced60b31b604482015290519081900360640190fd5b6007546040805163a9059cbb60e01b81526001600160a01b038581166004830152602482018590529151919092169163a9059cbb9160448083019260209291908290030181600087803b1580156150d157600080fd5b505af11580156150e5573d6000803e3d6000fd5b505050506040513d60208110156150fb57600080fd5b505060145461510a90826155c2565b6014555050565b60005461010090046001600160a01b031681565b60005461010090046001600160a01b031633148061514d57506004546001600160a01b031633145b8061516257506002546001600160a01b031633145b61519f576040805162461bcd60e51b81526020600482015260096024820152683737ba1030b236b4b760b91b604482015290519081900360640190fd5b60606151ab8383613854565b905060006024826040518082805190602001908083835b602083106151e15780518252601f1990920191602091820191016151c2565b51815160209384036101000a60001901801990921691161790529201948552506040519384900301909220805460ff1916931515939093179092555050601c5461278a9060016155c2565b60005460ff1681565b60196020526000908152604090205460ff1681565b6060615257826001613854565b905060156000836001600160a01b03166001600160a01b03168152602001908152602001600020546028826040518082805190602001908083835b602083106152b15780518252601f199092019160209182019101615292565b51815160209384036101000a6000190180199092169116179052920194855250604080519485900382018520959095556001600160a01b0387166000908152601b825294909420548551909460279487945092508291908401908083835b6020831061532e5780518252601f19909201916020918201910161530f565b51815160209384036101000a6000190180199092169116179052920194855250604080519485900382018520959095556001600160a01b03871660009081526022825294909420548551909460269487945092508291908401908083835b602083106153ab5780518252601f19909201916020918201910161538c565b51815160209384036101000a6000190180199092169116179052920194855250604080519485900382018520959095556001600160a01b0387166000908152601a82529490942054855160ff909116159460259487945092508291908401908083835b6020831061542d5780518252601f19909201916020918201910161540e565b51815160209384036101000a60001901801990921691161790529201948552506040519384900381018420805460ff1916951515959095179094555050825160259284929182918401908083835b6020831061549a5780518252601f19909201916020918201910161547b565b51815160209384036101000a600019018019909216911617905292019485525060405193849003019092205460ff1615915061554490505760016024826040518082805190602001908083835b602083106155065780518252601f1990920191602091820191016154e7565b51815160209384036101000a60001901801990921691161790529201948552506040519384900301909220805460ff19169315159390931790925550505b505033600090815260296020526040902080546001600160801b0319166001179055565b60008282018381101561318f576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b600061318f83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061569f565b60008261561357506000611801565b8282028284828161562057fe5b041461318f5760405162461bcd60e51b815260040180806020018281038252602181526020018061582f6021913960400191505060405180910390fd5b600061318f83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250615736565b6000818484111561572e5760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b838110156156f35781810151838201526020016156db565b50505050905090810190601f1680156157205780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b600081836157855760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156156f35781810151838201526020016156db565b50600083858161579157fe5b0495945050505050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106157dc57805160ff1916838001178555615809565b82800160010185558215615809579182015b828111156158095782518255916020019190600101906157ee565b50615815929150615819565b5090565b5b80821115615815576000815560010161581a56fe536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77a26469706673582212209d355198942c717e93719467041db95718946b20ee63726e08bfd0d65110484564736f6c634300060c0033

Deployed Bytecode

0x6080604052600436106104d65760003560e01c806387f48f4e11610281578063c723143f1161015a578063e195232e116100cc578063f3368f9011610085578063f3368f90146116b8578063f3fef3a3146116e2578063f851a4401461171b578063fc6ccdb514611730578063fed0a20e14611772578063ffbb698914611787576104d6565b8063e195232e146115fb578063e1d4b29d14611610578063e4ae0c8a1461163a578063e603c27014611664578063e7f9cefd14611679578063e877db1a1461168e576104d6565b8063d4bd89471161011e578063d4bd89471461152c578063d95210d01461156e578063d9df77de14611583578063da7169b314611598578063da998dca146115d1578063dc0bbf08146115e6576104d6565b8063c723143f146112a9578063c8b81e15146113cd578063d2c35ce814611415578063d39ca7de14611448578063d48ba4861461147b576104d6565b8063a978dab7116101f3578063b021465f116101b7578063b021465f146111f8578063b6b55f251461122b578063c0f0622d14611255578063c2b2fdca1461126a578063c415b95c1461127f578063c4ac59b214611294576104d6565b8063a978dab7146110a2578063aa5c3ab4146110d5578063ad0279a7146110ea578063ad553eef1461119b578063ae749c42146111ce576104d6565b80639162c594116102455780639162c59414610f39578063965d61b914610f4e57806398b4044214610f6357806399e6f700146110145780639edb4fb714611029578063a77e282514611053576104d6565b806387f48f4e14610e715780638aa9a37f14610e865780638ac2f9dd14610eb65780638d0c479b14610ef15780638faad75d14610f06576104d6565b806338392395116103b35780636331883b11610325578063778824a5116102e9578063778824a514610c26578063798f991c14610c685780637c05d6d814610cb25780637dff7f0014610d635780638123fdbb14610da5578063857d49d514610e5c576104d6565b80636331883b14610b8d57806367cb652614610bb757806368acd04214610bcc5780636f30015514610be15780636f36c10c14610bf6576104d6565b806348028d631161037757806348028d6314610a7c5780634c359aeb14610a915780634c8024cc14610ac45780634dd18bf514610af757806358f191c814610b2a578063623ef91014610b63576104d6565b8063383923951461099457806339941fa4146109be5780633bb58b67146109f257806340b584b414610a34578063418bc2c714610a67576104d6565b8063266655621161044c57806329575f6a1161041057806329575f6a146108395780632b6b66bb1461084e5780632fc29e0e1461088157806330fd63b6146108c357806331b933b9146108fc57806334dce6b314610961576104d6565b806326665562146106f8578063267822471461073a578063268e5e4f1461076b578063272dff73146107ad57806328333d15146107ef576104d6565b80630f6945841161049e5780630f694584146105af5780630fe48b36146105d55780631585dc28146105ea57806316f28a2a146105ff578063198858981461063257806319a1f5ae14610647576104d6565b806301c0775c146104db57806305eec2891461052257806309a07fd2146105435780630a8d1be21461056a5780630e18b6811461059a575b600080fd5b3480156104e757600080fd5b5061050e600480360360208110156104fe57600080fd5b50356001600160a01b03166117ba565b604080519115158252519081900360200190f35b6105416004803603602081101561053857600080fd5b50351515611807565b005b34801561054f57600080fd5b50610558611d10565b60408051918252519081900360200190f35b34801561057657600080fd5b506105416004803603604081101561058d57600080fd5b5080359060200135611d16565b3480156105a657600080fd5b50610541611de0565b610541600480360360208110156105c557600080fd5b50356001600160801b0316611e6f565b3480156105e157600080fd5b506105586121c9565b3480156105f657600080fd5b506105586121cf565b34801561060b57600080fd5b5061050e6004803603602081101561062257600080fd5b50356001600160a01b03166121d5565b34801561063e57600080fd5b506105586121ea565b34801561065357600080fd5b506105586004803603602081101561066a57600080fd5b810190602081018135600160201b81111561068457600080fd5b82018360208201111561069657600080fd5b803590602001918460018302840111600160201b831117156106b757600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295506121f0945050505050565b34801561070457600080fd5b5061050e6004803603604081101561071b57600080fd5b5080356001600160a01b031690602001356001600160801b031661220d565b34801561074657600080fd5b5061074f61228c565b604080516001600160a01b039092168252519081900360200190f35b34801561077757600080fd5b506105586004803603604081101561078e57600080fd5b5080356001600160a01b031690602001356001600160801b031661229b565b3480156107b957600080fd5b5061050e600480360360408110156107d057600080fd5b5080356001600160a01b031690602001356001600160801b0316612313565b3480156107fb57600080fd5b506105416004803603606081101561081257600080fd5b506001600160a01b03813516906001600160801b036020820135169060400135151561238e565b34801561084557600080fd5b5061074f6125fd565b34801561085a57600080fd5b506105586004803603602081101561087157600080fd5b50356001600160a01b031661260c565b34801561088d57600080fd5b50610541600480360360408110156108a457600080fd5b5080356001600160a01b031690602001356001600160801b031661261e565b3480156108cf57600080fd5b50610558600480360360408110156108e657600080fd5b506001600160a01b038135169060200135612792565b34801561090857600080fd5b50610911612899565b60408051602080825283518183015283519192839290830191858101910280838360005b8381101561094d578181015183820152602001610935565b505050509050019250505060405180910390f35b34801561096d57600080fd5b5061050e6004803603602081101561098457600080fd5b50356001600160a01b03166128fb565b3480156109a057600080fd5b50610541600480360360208110156109b757600080fd5b5035612919565b610541600480360360608110156109d457600080fd5b506001600160801b038135169060208101359060400135151561299b565b3480156109fe57600080fd5b5061055860048036036040811015610a1557600080fd5b5080356001600160a01b031690602001356001600160801b0316613182565b348015610a4057600080fd5b5061054160048036036020811015610a5757600080fd5b50356001600160a01b0316613196565b348015610a7357600080fd5b50610541613213565b348015610a8857600080fd5b5061074f613347565b348015610a9d57600080fd5b5061055860048036036020811015610ab457600080fd5b50356001600160a01b0316613356565b348015610ad057600080fd5b5061055860048036036020811015610ae757600080fd5b50356001600160a01b0316613368565b348015610b0357600080fd5b5061054160048036036020811015610b1a57600080fd5b50356001600160a01b031661337a565b348015610b3657600080fd5b5061054160048036036040811015610b4d57600080fd5b506001600160a01b0381351690602001356133ec565b348015610b6f57600080fd5b5061054160048036036020811015610b8657600080fd5b5035613482565b348015610b9957600080fd5b5061074f60048036036020811015610bb057600080fd5b5035613504565b348015610bc357600080fd5b5061055861352b565b348015610bd857600080fd5b50610558613531565b348015610bed57600080fd5b50610558613537565b348015610c0257600080fd5b5061054160048036036040811015610c1957600080fd5b508035906020013561353d565b348015610c3257600080fd5b5061050e60048036036040811015610c4957600080fd5b5080356001600160a01b031690602001356001600160801b0316613607565b348015610c7457600080fd5b5061054160048036036060811015610c8b57600080fd5b506001600160a01b03813516906001600160801b03602082013516906040013515156136f0565b348015610cbe57600080fd5b5061055860048036036020811015610cd557600080fd5b810190602081018135600160201b811115610cef57600080fd5b820183602082011115610d0157600080fd5b803590602001918460018302840111600160201b83111715610d2257600080fd5b91908080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509295506137ab945050505050565b348015610d6f57600080fd5b5061055860048036036040811015610d8657600080fd5b5080356001600160a01b031690602001356001600160801b03166137c8565b348015610db157600080fd5b50610de760048036036040811015610dc857600080fd5b5080356001600160a01b031690602001356001600160801b0316613854565b6040805160208082528351818301528351919283929083019185019080838360005b83811015610e21578181015183820152602001610e09565b50505050905090810190601f168015610e4e5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b348015610e6857600080fd5b5061074f6138de565b348015610e7d57600080fd5b506105586138ed565b348015610e9257600080fd5b5061054160048036036040811015610ea957600080fd5b50803590602001356138f3565b348015610ec257600080fd5b5061054160048036036040811015610ed957600080fd5b506001600160a01b03813516906020013515156139bd565b348015610efd57600080fd5b50610558613ba9565b348015610f1257600080fd5b5061055860048036036020811015610f2957600080fd5b50356001600160a01b0316613baf565b348015610f4557600080fd5b50610558613bca565b348015610f5a57600080fd5b5061074f613bd0565b348015610f6f57600080fd5b5061050e60048036036020811015610f8657600080fd5b810190602081018135600160201b811115610fa057600080fd5b820183602082011115610fb257600080fd5b803590602001918460018302840111600160201b83111715610fd357600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550613bdf945050505050565b34801561102057600080fd5b50610558613bff565b34801561103557600080fd5b506105416004803603602081101561104c57600080fd5b5035613c05565b34801561105f57600080fd5b506110866004803603602081101561107657600080fd5b50356001600160a01b0316613c87565b604080516001600160801b039092168252519081900360200190f35b3480156110ae57600080fd5b50610558600480360360208110156110c557600080fd5b50356001600160a01b0316613ca2565b3480156110e157600080fd5b50610558613cb4565b3480156110f657600080fd5b5061050e6004803603602081101561110d57600080fd5b810190602081018135600160201b81111561112757600080fd5b82018360208201111561113957600080fd5b803590602001918460018302840111600160201b8311171561115a57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550613cba945050505050565b3480156111a757600080fd5b50610541600480360360208110156111be57600080fd5b50356001600160a01b0316613cda565b3480156111da57600080fd5b50610541600480360360208110156111f157600080fd5b5035613d13565b34801561120457600080fd5b5061050e6004803603602081101561121b57600080fd5b50356001600160a01b0316613d95565b34801561123757600080fd5b506105416004803603602081101561124e57600080fd5b5035613daa565b34801561126157600080fd5b5061050e613ecf565b34801561127657600080fd5b50610558613ed8565b34801561128b57600080fd5b5061074f613ede565b3480156112a057600080fd5b50610558613eed565b3480156112b557600080fd5b5061054160048036036102008110156112cd57600080fd5b6001600160a01b038235811692602081013582169260408201358316926060830135169160808101359160a08201359160c08101359160e08201359161010081013591610120820135916101408101359161016082013591610180810135916101a0820135916101c08101359181019061020081016101e0820135600160201b81111561135957600080fd5b82018360208201111561136b57600080fd5b803590602001918460018302840111600160201b8311171561138c57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550613ef3945050505050565b3480156113d957600080fd5b50610558600480360360608110156113f057600080fd5b506001600160a01b03813516906001600160801b036020820135169060400135614056565b34801561142157600080fd5b506105416004803603602081101561143857600080fd5b50356001600160a01b03166143aa565b34801561145457600080fd5b506105416004803603602081101561146b57600080fd5b50356001600160a01b0316614427565b34801561148757600080fd5b506105586004803603602081101561149e57600080fd5b810190602081018135600160201b8111156114b857600080fd5b8201836020820111156114ca57600080fd5b803590602001918460018302840111600160201b831117156114eb57600080fd5b91908080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250929550614499945050505050565b34801561153857600080fd5b506105416004803603604081101561154f57600080fd5b5080356001600160801b031690602001356001600160a01b03166144b6565b34801561157a57600080fd5b50610558614bb6565b34801561158f57600080fd5b50610558614bbc565b3480156115a457600080fd5b50610558600480360360408110156115bb57600080fd5b506001600160a01b038135169060200135614bc2565b3480156115dd57600080fd5b5061074f614c2a565b3480156115f257600080fd5b50610558614c39565b34801561160757600080fd5b5061074f614c3f565b34801561161c57600080fd5b506105416004803603602081101561163357600080fd5b5035614c4e565b34801561164657600080fd5b506105416004803603602081101561165d57600080fd5b5035614cd0565b34801561167057600080fd5b50610de7614d52565b34801561168557600080fd5b50610541614de0565b34801561169a57600080fd5b50610541600480360360208110156116b157600080fd5b5035614e69565b3480156116c457600080fd5b50610541600480360360208110156116db57600080fd5b5035614f29565b3480156116ee57600080fd5b506105416004803603604081101561170557600080fd5b506001600160a01b038135169060200135614fab565b34801561172757600080fd5b5061074f615111565b34801561173c57600080fd5b506105416004803603604081101561175357600080fd5b5080356001600160a01b031690602001356001600160801b0316615125565b34801561177e57600080fd5b5061050e61522c565b34801561179357600080fd5b5061050e600480360360208110156117aa57600080fd5b50356001600160a01b0316615235565b6001600160a01b03811660009081526018602052604081205460ff16801561180157506001600160a01b0382166000908152602960205260409020546001600160801b0316155b92915050565b600080611813336117ba565b15611821576118213361524a565b336000818152602960205260409020546001600160801b03166001019060609061184b9083613854565b9050841561187457601f54602054601c54919550935061186c906001615568565b601c556118f0565b600f549350601054925060016025826040518082805190602001908083835b602083106118b25780518252601f199092019160209182019101611893565b51815160209384036101000a60001901801990921691161790529201948552506040519384900301909220805460ff19169315159390931790925550505b833414611932576040805162461bcd60e51b815260206004820152600b60248201526a696e76616c69642066656560a81b604482015290519081900360640190fd5b436027826040518082805190602001908083835b602083106119655780518252601f199092019160209182019101611946565b6001836020036101000a0380198251168184511680821785525050505050509050019150509081526020016040518091039020819055506023546026826040518082805190602001908083835b602083106119d15780518252601f1990920191602091820191016119b2565b51815160209384036101000a6000190180199092169116179052920194855250604051938490038101842094909455505082514392602892859290918291908401908083835b60208310611a365780518252601f199092019160209182019101611a17565b51815160001960209485036101000a0190811690199190911617905292019485525060408051948590038201852095909555336000908152602990915293842080546001600160801b03808216600101166001600160801b031990911617905550506006546001600160a01b0316913480156108fc02929091818181858888f19350505050158015611acc573d6000803e3d6000fd5b50600754604080516323b872dd60e01b81523360048201523060248201526044810186905290516001600160a01b03909216916323b872dd916064808201926020929091908290030181600087803b158015611b2757600080fd5b505af1158015611b3b573d6000803e3d6000fd5b505050506040513d6020811015611b5157600080fd5b50506007546006546040805163a9059cbb60e01b81526001600160a01b039283166004820152602481018790529051919092169163a9059cbb9160448083019260209291908290030181600087803b158015611bac57600080fd5b505af1158015611bc0573d6000803e3d6000fd5b505050506040513d6020811015611bd657600080fd5b5050604051815133917f39b0a0620bb668047ab7248973ddfd93d53dff1d4952bd2d56bbf5934edc1fd0918591602591869190819060208401908083835b60208310611c335780518252601f199092019160209182019101611c14565b51815160209384036101000a6000190180199092169116179052920194855250604051938490038101842054601354895160ff9092169560009550611cda945090926027928b92918291908401908083835b60208310611ca45780518252601f199092019160209182019101611c85565b51815160209384036101000a60001901801990921691161790529201948552506040519384900301909220549291506155689050565b604080516001600160801b0390951685529215156020850152901515838301526060830152519081900360800190a25050505050565b600d5481565b60005461010090046001600160a01b0316331480611d3e57506005546001600160a01b031633145b80611d5357506002546001600160a01b031633145b611d93576040805162461bcd60e51b815260206004820152600c60248201526b3737ba1030b71030b236b4b760a11b604482015290519081900360640190fd5b80611dd5576040805162461bcd60e51b815260206004820152600d60248201526c696e76616c69642076616c756560981b604482015290519081900360640190fd5b600991909155600a55565b6001546001600160a01b031633148015611df957503315155b611e3d576040805162461bcd60e51b815260206004820152601060248201526f3737ba103832b73234b733a0b236b4b760811b604482015290519081900360640190fd5b6001805460008054610100600160a81b0319166101006001600160a01b038416021790556001600160a01b0319169055565b6060611e7b3383613854565b9050611e86336117ba565b15611e9457611e943361524a565b611e9e338361220d565b611ede576040805162461bcd60e51b815260206004820152600c60248201526b191bd95cdb9d08195e1a5cdd60a21b604482015290519081900360640190fd5b6025816040518082805190602001908083835b60208310611f105780518252601f199092019160209182019101611ef1565b51815160209384036101000a600019018019909216911617905292019485525060405193849003019092205460ff16159150611f919050576011543414611f8c576040805162461bcd60e51b815260206004820152600b60248201526a696e76616c69642066656560a81b604482015290519081900360640190fd5b611fd5565b6012543414611fd5576040805162461bcd60e51b815260206004820152600b60248201526a696e76616c69642066656560a81b604482015290519081900360640190fd5b6006546040516001600160a01b03909116903480156108fc02916000818181858888f1935050505015801561200e573d6000803e3d6000fd5b5061204660135460278360405180828051906020019080838360208310611ca45780518252601f199092019160209182019101611c85565b6027826040518082805190602001908083835b602083106120785780518252601f199092019160209182019101612059565b51815160209384036101000a60001901801990921691161790529201948552506040519384900381018420949094555050825133927f39b0a0620bb668047ab7248973ddfd93d53dff1d4952bd2d56bbf5934edc1fd092869260259287929182918401908083835b602083106120ff5780518252601f1990920191602091820191016120e0565b51815160209384036101000a6000190180199092169116179052920194855250604051938490038101842054885160ff9091169460019450602793508992909182918401908083835b602083106121675780518252601f199092019160209182019101612148565b51815160001960209485036101000a01908116901991909116179052920194855250604080519485900382018520546001600160801b039098168552951515908401525050901515818301526060810192909252519081900360800190a25050565b60135481565b601f5481565b60186020526000908152604090205460ff1681565b600a5481565b805160208183018101805160288252928201919093012091525481565b6000606061221b8484613854565b905060006027826040518082805190602001908083835b602083106122515780518252601f199092019160209182019101612232565b51815160209384036101000a600019018019909216911617905292019485525060405193849003019092205492909211935050505092915050565b6001546001600160a01b031681565b600060606122a98484613854565b90506027816040518082805190602001908083835b602083106122dd5780518252601f1990920191602091820191016122be565b51815160209384036101000a60001901801990921691161790529201948552506040519384900301909220549695505050505050565b600060606123218484613854565b90506025816040518082805190602001908083835b602083106123555780518252601f199092019160209182019101612336565b51815160209384036101000a600019018019909216911617905292019485525060405193849003019092205460ff169695505050505050565b60005461010090046001600160a01b03163314806123b657506004546001600160a01b031633145b806123cb57506002546001600160a01b031633145b612408576040805162461bcd60e51b81526020600482015260096024820152683737ba1030b236b4b760b91b604482015290519081900360640190fd5b60606124148484613854565b905081801561248457506024816040518082805190602001908083835b602083106124505780518252601f199092019160209182019101612431565b51815160209384036101000a600019018019909216911617905292019485525060405193849003019092205460ff16159150505b1561250257601c54612497906001615568565b601c81905550436028826040518082805190602001908083835b602083106124d05780518252601f1990920191602091820191016124b1565b51815160209384036101000a600019018019909216911617905292019485525060405193849003019092209290925550505b8115801561257057506024816040518082805190602001908083835b6020831061253d5780518252601f19909201916020918201910161251e565b51815160209384036101000a600019018019909216911617905292019485525060405193849003019092205460ff169150505b1561258757601c546125839060016155c2565b601c555b816024826040518082805190602001908083835b602083106125ba5780518252601f19909201916020918201910161259b565b51815160209384036101000a60001901801990921691161790529201948552506040519384900301909220805460ff191693151593909317909255505050505050565b6002546001600160a01b031681565b60226020526000908152604090205481565b60005461010090046001600160a01b031633148061264657506004546001600160a01b031633145b8061265b57506002546001600160a01b031633145b612698576040805162461bcd60e51b81526020600482015260096024820152683737ba1030b236b4b760b91b604482015290519081900360640190fd5b60606126a48383613854565b905060016024826040518082805190602001908083835b602083106126da5780518252601f1990920191602091820191016126bb565b51815160209384036101000a60001901801990921691161790529201948552506040519384900381018420805460ff191695151595909517909455505082514392602892859290918291908401908083835b6020831061274b5780518252601f19909201916020918201910161272c565b51815160209384036101000a60001901801990921691161790529201948552506040519384900301909220929092555050601c5461278a906001615568565b601c55505050565b6000438211156127a457506000611801565b6001600160a01b0383166000908152601560205260409020546127c957506000611801565b6001600160a01b0383166000908152601560205260409020548210156127f157506000611801565b601c5461280057506000611801565b6001600160a01b0383166000908152601560205260408120546128249084906155c2565b6001600160a01b0385166000908152601a602052604081205491925090819060ff1615612858575050600b54600c54612861565b5050600954600a545b6000612877826128718686615604565b9061565d565b905061288e601c548261565d90919063ffffffff16565b979650505050505050565b606060168054806020026020016040519081016040528092919081815260200182805480156128f157602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116128d3575b5050505050905090565b6001600160a01b031660009081526018602052604090205460ff1690565b60005461010090046001600160a01b031633148061294157506005546001600160a01b031633145b8061295657506002546001600160a01b031633145b612996576040805162461bcd60e51b815260206004820152600c60248201526b3737ba1030b71030b236b4b760a11b604482015290519081900360640190fd5b601255565b60606129a73385613854565b90506129b2336117ba565b156129c0576129c03361524a565b60006028826040518082805190602001908083835b602083106129f45780518252601f1990920191602091820191016129d5565b51815160209384036101000a600019018019909216911617905292019485525060405193849003019092205415159150612a919050576027826040518082805190602001908083835b60208310612a5c5780518252601f199092019160209182019101612a3d565b51815160209384036101000a60001901801990921691161790529201948552506040519384900301909220549150612af39050565b6028826040518082805190602001908083835b60208310612ac35780518252601f199092019160209182019101612aa4565b51815160209384036101000a60001901801990921691161790529201948552506040519384900301909220549150505b905060006027836040518082805190602001908083835b60208310612b295780518252601f199092019160209182019101612b0a565b51815160001960209485036101000a019081169019919091161790529201948552506040519384900301909220549250505081612b9d576040805162461bcd60e51b815260206004820152600d60248201526c1b995d995c8818db185a5b5959609a1b604482015290519081900360640190fd5b43851115612be2576040805162461bcd60e51b815260206004820152600d60248201526c696e76616c696420626c6f636b60981b604482015290519081900360640190fd5b818511612c21576040805162461bcd60e51b81526020600482015260086024820152673a37b79039b7b7b760c11b604482015290519081900360640190fd5b6025836040518082805190602001908083835b60208310612c535780518252601f199092019160209182019101612c34565b51815160209384036101000a600019018019909216911617905292019485525060405193849003019092205460ff16159150819050612cf257506024836040518082805190602001908083835b60208310612cbf5780518252601f199092019160209182019101612ca0565b51815160209384036101000a600019018019909216911617905292019485525060405193849003019092205460ff169150505b612d30576040805162461bcd60e51b815260206004820152600a6024820152696e6f742061637469766560b01b604482015290519081900360640190fd5b6025836040518082805190602001908083835b60208310612d625780518252601f199092019160209182019101612d43565b51815160209384036101000a600019018019909216911617905292019485525060405193849003019092205460ff16159150508015612da2575060125415155b80612e1957506025836040518082805190602001908083835b60208310612dda5780518252601f199092019160209182019101612dbb565b51815160209384036101000a600019018019909216911617905292019485525060405193849003019092205460ff169150508015612e19575060115415155b15612e6957601354612e2c908290615568565b8510612e69576040805162461bcd60e51b81526020600482015260076024820152667061792066656560c81b604482015290519081900360640190fd5b6000612e76338888614056565b905060008111612eb9576040805162461bcd60e51b81526020600482015260096024820152681b9bc81c995dd85c9960ba1b604482015290519081900360640190fd5b6000612ed6600e54612871600d548561560490919063ffffffff16565b9050803414612f1a576040805162461bcd60e51b815260206004820152600b60248201526a696e76616c69642066656560a81b604482015290519081900360640190fd5b6006546040516001600160a01b03909116903480156108fc02916000818181858888f19350505050158015612f53573d6000803e3d6000fd5b50851561304f576007546008546040805163095ea7b360e01b81526001600160a01b039283166004820152602481018690529051919092169163095ea7b39160448083019260209291908290030181600087803b158015612fb357600080fd5b505af1158015612fc7573d6000803e3d6000fd5b505050506040513d6020811015612fdd57600080fd5b5050600854604080516330d6a97560e01b81523360048201526024810185905290516001600160a01b03909216916330d6a9759160448082019260009290919082900301818387803b15801561303257600080fd5b505af1158015613046573d6000803e3d6000fd5b505050506130d0565b6007546040805163a9059cbb60e01b81523360048201526024810185905290516001600160a01b039092169163a9059cbb916044808201926020929091908290030181600087803b1580156130a357600080fd5b505af11580156130b7573d6000803e3d6000fd5b505050506040513d60208110156130cd57600080fd5b50505b6014546130dd90836155c2565b601481905550866028866040518082805190602001908083835b602083106131165780518252601f1990920191602091820191016130f7565b51815160209384036101000a600019018019909216911617905292019485525060408051948590038201852095909555868452935133947fd8138f8a3f377c5259ca548e70e4c2de94f129f5a11036a15b69513cba2b426a948290030192509050a25050505050505050565b600061318f838343614056565b9392505050565b6001600160a01b0381166131da576040805162461bcd60e51b815260206004808301919091526024820152637a65726f60e01b604482015290519081900360640190fd5b6002546001600160a01b031633146131f157600080fd5b600580546001600160a01b0319166001600160a01b0392909216919091179055565b60215460ff161561325d576040805162461bcd60e51b815260206004820152600f60248201526e185b1c9958591e481c995b5bdd9959608a1b604482015290519081900360640190fd5b6002546001600160a01b031633146132ab576040805162461bcd60e51b815260206004820152600c60248201526b3737ba1030b71030b236b4b760a11b604482015290519081900360640190fd5b6007546002546040805163a9059cbb60e01b81526001600160a01b03928316600482015268878678326eac90000060248201529051919092169163a9059cbb9160448083019260209291908290030181600087803b15801561330c57600080fd5b505af1158015613320573d6000803e3d6000fd5b505050506040513d602081101561333657600080fd5b50506021805460ff19166001179055565b6003546001600160a01b031681565b60156020526000908152604090205481565b60176020526000908152604090205481565b60005461010090046001600160a01b031633146133ca576040805162461bcd60e51b81526020600482015260096024820152683737ba1030b236b4b760b91b604482015290519081900360640190fd5b600180546001600160a01b0319166001600160a01b0392909216919091179055565b60005461010090046001600160a01b031633148061341457506004546001600160a01b031633145b8061342957506002546001600160a01b031633145b613466576040805162461bcd60e51b81526020600482015260096024820152683737ba1030b236b4b760b91b604482015290519081900360640190fd5b6001600160a01b03909116600090815260226020526040902055565b60005461010090046001600160a01b03163314806134aa57506005546001600160a01b031633145b806134bf57506002546001600160a01b031633145b6134ff576040805162461bcd60e51b815260206004820152600c60248201526b3737ba1030b71030b236b4b760a11b604482015290519081900360640190fd5b601055565b6016818154811061351157fe5b6000918252602090912001546001600160a01b0316905081565b60125481565b60235481565b600f5481565b60005461010090046001600160a01b031633148061356557506005546001600160a01b031633145b8061357a57506002546001600160a01b031633145b6135ba576040805162461bcd60e51b815260206004820152600c60248201526b3737ba1030b71030b236b4b760a11b604482015290519081900360640190fd5b806135fc576040805162461bcd60e51b815260206004820152600d60248201526c696e76616c69642076616c756560981b604482015290519081900360640190fd5b600b91909155600c55565b600060606136158484613854565b90506024816040518082805190602001908083835b602083106136495780518252601f19909201916020918201910161362a565b51815160209384036101000a600019018019909216911617905292019485525060405193849003019092205460ff1691508190506136e857506025816040518082805190602001908083835b602083106136b45780518252601f199092019160209182019101613695565b51815160209384036101000a600019018019909216911617905292019485525060405193849003019092205460ff16159150505b949350505050565b60005461010090046001600160a01b031633148061371857506004546001600160a01b031633145b8061372d57506002546001600160a01b031633145b61376a576040805162461bcd60e51b81526020600482015260096024820152683737ba1030b236b4b760b91b604482015290519081900360640190fd5b60606137768484613854565b90508115602582604051808280519060200190808383602083106125ba5780518252601f19909201916020918201910161259b565b805160208183018101805160268252928201919093012091525481565b600060606137d68484613854565b90506025816040518082805190602001908083835b6020831061380a5780518252601f1990920191602091820191016137eb565b51815160209384036101000a600019018019909216911617905292019485525060405193849003019092205460ff1691506138499050576012546136e8565b505060115492915050565b606060006001600160801b038316613890576001600160a01b0384166000908152602960205260409020546001600160801b0316600101613892565b825b6040805160609690961b6bffffffffffffffffffffffff1916602087015260809190911b6001600160801b03191660348601528051808603602401815260449095019052509192915050565b6005546001600160a01b031681565b600e5481565b60005461010090046001600160a01b031633148061391b57506005546001600160a01b031633145b8061393057506002546001600160a01b031633145b613970576040805162461bcd60e51b815260206004820152600c60248201526b3737ba1030b71030b236b4b760a11b604482015290519081900360640190fd5b806139b2576040805162461bcd60e51b815260206004820152600d60248201526c696e76616c69642076616c756560981b604482015290519081900360640190fd5b600d91909155600e55565b60005461010090046001600160a01b03163314806139e557506004546001600160a01b031633145b806139fa57506002546001600160a01b031633145b613a37576040805162461bcd60e51b81526020600482015260096024820152683737ba1030b236b4b760b91b604482015290519081900360640190fd5b6001600160a01b0382166000818152601760205260409020546016805491929183908110613a6157fe5b6000918252602090912001546001600160a01b031614613ab9576040805162461bcd60e51b815260206004820152600e60248201526d696e76616c696420656e7469747960901b604482015290519081900360640190fd5b6001600160a01b03831660009081526018602052604090205460ff1615158215151415613b1b576040805162461bcd60e51b815260206004820152600b60248201526a185b1c9958591e481cd95d60aa1b604482015290519081900360640190fd5b6001600160a01b0383166000908152601860205260409020805460ff19168315801591909117909155613b7957601c54613b56906001615568565b601c556001600160a01b0383166000908152601560205260409020439055613ba4565b601c54613b879060016155c2565b601c556001600160a01b0383166000908152601560205260408120555b505050565b60205481565b6001600160a01b031660009081526022602052604090205490565b60115481565b6007546001600160a01b031681565b805160208183018101805160258252928201919093012091525460ff1681565b60095481565b60005461010090046001600160a01b0316331480613c2d57506005546001600160a01b031633145b80613c4257506002546001600160a01b031633145b613c82576040805162461bcd60e51b815260206004820152600c60248201526b3737ba1030b71030b236b4b760a11b604482015290519081900360640190fd5b601f55565b6029602052600090815260409020546001600160801b031681565b601b6020526000908152604090205481565b60145481565b805160208183018101805160248252928201919093012091525460ff1681565b6002546001600160a01b03163314613cf157600080fd5b600480546001600160a01b0319166001600160a01b0392909216919091179055565b60005461010090046001600160a01b0316331480613d3b57506005546001600160a01b031633145b80613d5057506002546001600160a01b031633145b613d90576040805162461bcd60e51b815260206004820152600c60248201526b3737ba1030b71030b236b4b760a11b604482015290519081900360640190fd5b600f55565b601a6020526000908152604090205460ff1681565b6002546001600160a01b03163314613df8576040805162461bcd60e51b815260206004820152600c60248201526b3737ba1030b71030b236b4b760a11b604482015290519081900360640190fd5b60008111613e36576040805162461bcd60e51b815260206004808301919091526024820152637a65726f60e01b604482015290519081900360640190fd5b600754604080516323b872dd60e01b81523360048201523060248201526044810184905290516001600160a01b03909216916323b872dd916064808201926020929091908290030181600087803b158015613e9057600080fd5b505af1158015613ea4573d6000803e3d6000fd5b505050506040513d6020811015613eba57600080fd5b5050601454613ec99082615568565b60145550565b60215460ff1681565b601e5481565b6006546001600160a01b031681565b600c5481565b60005460ff1615613f37576040805162461bcd60e51b8152602060048201526009602482015268696e697420646f6e6560b81b604482015290519081900360640190fd5b8f600760006101000a8154816001600160a01b0302191690836001600160a01b031602179055508e600860006101000a8154816001600160a01b0302191690836001600160a01b031602179055508d600060016101000a8154816001600160a01b0302191690836001600160a01b031602179055508c600260006101000a8154816001600160a01b0302191690836001600160a01b031602179055508b6009819055508a600a8190555089600b8190555088600c8190555087600f8190555086601081905550856011819055508460128190555082600d8190555081600e819055508360138190555080601d908051906020019061403692919061579b565b50506000805460ff19166001179055505050505050505050505050505050565b600060606140648585613854565b905061406f856117ba565b156140865761407e8584612792565b91505061318f565b60006028826040518082805190602001908083835b602083106140ba5780518252601f19909201916020918201910161409b565b51815160209384036101000a6000190180199092169116179052920194855250604051938490030190922054151591506141579050576027826040518082805190602001908083835b602083106141225780518252601f199092019160209182019101614103565b51815160209384036101000a600019018019909216911617905292019485525060405193849003019092205491506141b99050565b6028826040518082805190602001908083835b602083106141895780518252601f19909201916020918201910161416a565b51815160209384036101000a60001901801990921691161790529201948552506040519384900301909220549150505b9050438411156141ce5760009250505061318f565b806141de5760009250505061318f565b808410156141f15760009250505061318f565b601c546142035760009250505061318f565b6025826040518082805190602001908083835b602083106142355780518252601f199092019160209182019101614216565b51815160209384036101000a600019018019909216911617905292019485525060405193849003019092205460ff1691505080156142d457506024826040518082805190602001908083835b602083106142a05780518252601f199092019160209182019101614281565b51815160209384036101000a600019018019909216911617905292019485525060405193849003019092205460ff16159150505b156142e45760009250505061318f565b60006142f085836155c2565b90506000806025856040518082805190602001908083835b602083106143275780518252601f199092019160209182019101614308565b51815160209384036101000a600019018019909216911617905292019485525060405193849003019092205460ff1615915061436c9050575050600954600a54614375565b5050600b54600c545b6000614385826128718686615604565b905061439c601c548261565d90919063ffffffff16565b9a9950505050505050505050565b6001600160a01b0381166143ee576040805162461bcd60e51b815260206004808301919091526024820152637a65726f60e01b604482015290519081900360640190fd5b6002546001600160a01b0316331461440557600080fd5b600680546001600160a01b0319166001600160a01b0392909216919091179055565b6002546001600160a01b03163314614477576040805162461bcd60e51b815260206004820152600e60248201526d3737ba1039bab832b920b236b4b760911b604482015290519081900360640190fd5b600380546001600160a01b0319166001600160a01b0392909216919091179055565b805160208183018101805160278252928201919093012091525481565b6144bf336117ba565b156144cd576144cd3361524a565b6144d7338361220d565b614517576040805162461bcd60e51b815260206004820152600c60248201526b191bd95cdb9d08195e1a5cdd60a21b604482015290519081900360640190fd5b6001600160a01b0381166000908152602960205260409020546001600160801b031660010160606145483385613854565b905060606145568484613854565b90506024826040518082805190602001908083835b6020831061458a5780518252601f19909201916020918201910161456b565b51815160209384036101000a6000190180199092169116179052920194855250604051938490038101842054855160ff9091169460249450869350918291908401908083835b602083106145ef5780518252601f1990920191602091820191016145d0565b51815160209384036101000a60001901801990921691161790529201948552506040519384900381018420805460ff1916951515959095179094555050835160259285929182918401908083835b6020831061465c5780518252601f19909201916020918201910161463d565b51815160209384036101000a6000190180199092169116179052920194855250604051938490038101842054855160ff9091169460259450869350918291908401908083835b602083106146c15780518252601f1990920191602091820191016146a2565b51815160209384036101000a60001901801990921691161790529201948552506040519384900381018420805460ff1916951515959095179094555050835160279285929182918401908083835b6020831061472e5780518252601f19909201916020918201910161470f565b51815160209384036101000a60001901801990921691161790529201948552506040519384900381018420548551909460279450869350918291908401908083835b6020831061478f5780518252601f199092019160209182019101614770565b51815160209384036101000a60001901801990921691161790529201948552506040519384900381018420949094555050835160289285929182918401908083835b602083106147f05780518252601f1990920191602091820191016147d1565b51815160209384036101000a60001901801990921691161790529201948552506040519384900381018420548551909460289450869350918291908401908083835b602083106148515780518252601f199092019160209182019101614832565b51815160209384036101000a60001901801990921691161790529201948552506040519384900381018420949094555050835160269285929182918401908083835b602083106148b25780518252601f199092019160209182019101614893565b51815160209384036101000a60001901801990921691161790529201948552506040519384900381018420548551909460269450869350918291908401908083835b602083106149135780518252601f1990920191602091820191016148f4565b51815160209384036101000a6000190180199092169116179052920194855250604080519485900382018520959095556001600160a01b03891660009081526029825294852080546001600160801b0319811660016001600160801b03928316019091161790558651602494889450925082918401908083835b602083106149ac5780518252601f19909201916020918201910161498d565b51815160209384036101000a60001901801990921691161790529201948552506040519384900381018420805460ff19169515159590951790945550508351600092602792869290918291908401908083835b60208310614a1e5780518252601f1990920191602091820191016149ff565b51815160209384036101000a600019018019909216911617905292019485525060405193849003810184209490945550508351600092602892869290918291908401908083835b60208310614a845780518252601f199092019160209182019101614a65565b51815160001960209485036101000a8101918216911992909216179091529390910195865260408051968790038201872097909755336000818152602983529790972080546001600160801b038082169095019094166001600160801b0319909416939093179092555086516001600160a01b038a1695947f5ba846403c17c6c23ab5f5acb4601b016614564f82bb9def90aa1d3893d4a54594508b935089926025928a92918291908401908083835b60208310614b535780518252601f199092019160209182019101614b34565b51815160001960209485036101000a01908116901991909116179052920194855250604080519485900382018520546001600160801b0397881686529590961690840152505060ff90911615158183015290519081900360600190a35050505050565b600b5481565b60105481565b60008060015b6001600160a01b0385166000908152602960205260409020546001600160801b0390811690821611614c2257614c18614c11868360008811614c0a5743614c0c565b875b614056565b8390615568565b9150600101614bc8565b509392505050565b6004546001600160a01b031681565b601c5481565b6008546001600160a01b031681565b60005461010090046001600160a01b0316331480614c7657506005546001600160a01b031633145b80614c8b57506002546001600160a01b031633145b614ccb576040805162461bcd60e51b815260206004820152600c60248201526b3737ba1030b71030b236b4b760a11b604482015290519081900360640190fd5b602355565b60005461010090046001600160a01b0316331480614cf857506005546001600160a01b031633145b80614d0d57506002546001600160a01b031633145b614d4d576040805162461bcd60e51b815260206004820152600c60248201526b3737ba1030b71030b236b4b760a11b604482015290519081900360640190fd5b602055565b601d805460408051602060026001851615610100026000190190941693909304601f81018490048402820184019092528181529291830182828015614dd85780601f10614dad57610100808354040283529160200191614dd8565b820191906000526020600020905b815481529060010190602001808311614dbb57829003601f168201915b505050505081565b6003546001600160a01b031633148015614df957503315155b614e42576040805162461bcd60e51b81526020600482015260156024820152743737ba103832b73234b733a9bab832b920b236b4b760591b604482015290519081900360640190fd5b60038054600280546001600160a01b03199081166001600160a01b03841617909155169055565b60005461010090046001600160a01b0316331480614e9157506005546001600160a01b031633145b80614ea657506002546001600160a01b031633145b614ee6576040805162461bcd60e51b815260206004820152600c60248201526b3737ba1030b71030b236b4b760a11b604482015290519081900360640190fd5b60008111614f24576040805162461bcd60e51b815260206004808301919091526024820152637a65726f60e01b604482015290519081900360640190fd5b601355565b60005461010090046001600160a01b0316331480614f5157506005546001600160a01b031633145b80614f6657506002546001600160a01b031633145b614fa6576040805162461bcd60e51b815260206004820152600c60248201526b3737ba1030b71030b236b4b760a11b604482015290519081900360640190fd5b601155565b6002546001600160a01b03163314614ff9576040805162461bcd60e51b815260206004820152600c60248201526b3737ba1030b71030b236b4b760a11b604482015290519081900360640190fd5b60008111615037576040805162461bcd60e51b815260206004808301919091526024820152637a65726f60e01b604482015290519081900360640190fd5b80601454101561507b576040805162461bcd60e51b815260206004820152600a6024820152690dcdee840cadcdeeaced60b31b604482015290519081900360640190fd5b6007546040805163a9059cbb60e01b81526001600160a01b038581166004830152602482018590529151919092169163a9059cbb9160448083019260209291908290030181600087803b1580156150d157600080fd5b505af11580156150e5573d6000803e3d6000fd5b505050506040513d60208110156150fb57600080fd5b505060145461510a90826155c2565b6014555050565b60005461010090046001600160a01b031681565b60005461010090046001600160a01b031633148061514d57506004546001600160a01b031633145b8061516257506002546001600160a01b031633145b61519f576040805162461bcd60e51b81526020600482015260096024820152683737ba1030b236b4b760b91b604482015290519081900360640190fd5b60606151ab8383613854565b905060006024826040518082805190602001908083835b602083106151e15780518252601f1990920191602091820191016151c2565b51815160209384036101000a60001901801990921691161790529201948552506040519384900301909220805460ff1916931515939093179092555050601c5461278a9060016155c2565b60005460ff1681565b60196020526000908152604090205460ff1681565b6060615257826001613854565b905060156000836001600160a01b03166001600160a01b03168152602001908152602001600020546028826040518082805190602001908083835b602083106152b15780518252601f199092019160209182019101615292565b51815160209384036101000a6000190180199092169116179052920194855250604080519485900382018520959095556001600160a01b0387166000908152601b825294909420548551909460279487945092508291908401908083835b6020831061532e5780518252601f19909201916020918201910161530f565b51815160209384036101000a6000190180199092169116179052920194855250604080519485900382018520959095556001600160a01b03871660009081526022825294909420548551909460269487945092508291908401908083835b602083106153ab5780518252601f19909201916020918201910161538c565b51815160209384036101000a6000190180199092169116179052920194855250604080519485900382018520959095556001600160a01b0387166000908152601a82529490942054855160ff909116159460259487945092508291908401908083835b6020831061542d5780518252601f19909201916020918201910161540e565b51815160209384036101000a60001901801990921691161790529201948552506040519384900381018420805460ff1916951515959095179094555050825160259284929182918401908083835b6020831061549a5780518252601f19909201916020918201910161547b565b51815160209384036101000a600019018019909216911617905292019485525060405193849003019092205460ff1615915061554490505760016024826040518082805190602001908083835b602083106155065780518252601f1990920191602091820191016154e7565b51815160209384036101000a60001901801990921691161790529201948552506040519384900301909220805460ff19169315159390931790925550505b505033600090815260296020526040902080546001600160801b0319166001179055565b60008282018381101561318f576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b600061318f83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061569f565b60008261561357506000611801565b8282028284828161562057fe5b041461318f5760405162461bcd60e51b815260040180806020018281038252602181526020018061582f6021913960400191505060405180910390fd5b600061318f83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250615736565b6000818484111561572e5760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b838110156156f35781810151838201526020016156db565b50505050905090810190601f1680156157205780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b600081836157855760405162461bcd60e51b81526020600482018181528351602484015283519092839260449091019190850190808383600083156156f35781810151838201526020016156db565b50600083858161579157fe5b0495945050505050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106157dc57805160ff1916838001178555615809565b82800160010185558215615809579182015b828111156158095782518255916020019190600101906157ee565b50615815929150615819565b5090565b5b80821115615815576000815560010161581a56fe536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77a26469706673582212209d355198942c717e93719467041db95718946b20ee63726e08bfd0d65110484564736f6c634300060c0033

Deployed Bytecode Sourcemap

142:20276:2:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17323:136;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;17323:136:2;-1:-1:-1;;;;;17323:136:2;;:::i;:::-;;;;;;;;;;;;;;;;;;9627:1062;;;;;;;;;;;;;;;;-1:-1:-1;9627:1062:2;;;;:::i;:::-;;795:35;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;6010:326;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;6010:326:2;;;;;;;:::i;4613:181::-;;;;;;;;;;;;;:::i;11498:655::-;;;;;;;;;;;;;;;;-1:-1:-1;11498:655:2;-1:-1:-1;;;;;11498:655:2;;:::i;1024:44::-;;;;;;;;;;;;;:::i;1544:37::-;;;;;;;;;;;;;:::i;1249:44::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1249:44:2;-1:-1:-1;;;;;1249:44:2;;:::i;655:40::-;;;;;;;;;;;;;:::i;1949:57::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;1949:57:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;1949:57:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1949:57:2;;-1:-1:-1;1949:57:2;;-1:-1:-1;;;;;1949:57:2:i;16169:178::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;16169:178:2;;-1:-1:-1;;;;;16169:178:2;;;;;-1:-1:-1;;;;;16169:178:2;;:::i;342:27::-;;;;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;342:27:2;;;;;;;;;;;;;;16556:177;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;16556:177:2;;-1:-1:-1;;;;;16556:177:2;;;;;-1:-1:-1;;;;;16556:177:2;;:::i;17153:166::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;17153:166:2;;-1:-1:-1;;;;;17153:166:2;;;;;-1:-1:-1;;;;;17153:166:2;;:::i;18127:529::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;18127:529:2;;;;-1:-1:-1;;;;;18127:529:2;;;;;;;;;;;;:::i;373:25::-;;;;;;;;;;;;;:::i;1654:42::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1654:42:2;-1:-1:-1;;;;;1654:42:2;;:::i;17463:352::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;17463:352:2;;-1:-1:-1;;;;;17463:352:2;;;;;-1:-1:-1;;;;;17463:352:2;;:::i;13482:858::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;13482:858:2;;;;;;;;:::i;5298:88::-;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5390:105;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;5390:105:2;-1:-1:-1;;;;;5390:105:2;;:::i;9047:210::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;9047:210:2;;:::i;14344:1493::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;14344:1493:2;;;;;;;;;;;;;;;:::i;12157:145::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;12157:145:2;;-1:-1:-1;;;;;12157:145:2;;;;;-1:-1:-1;;;;;12157:145:2;;:::i;4054:202::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;4054:202:2;-1:-1:-1;;;;;4054:202:2;;:::i;7236:346::-;;;;;;;;;;;;;:::i;402:32::-;;;;;;;;;;;;;:::i;1106:59::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1106:59:2;-1:-1:-1;;;;;1106:59:2;;:::i;1199:46::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1199:46:2;-1:-1:-1;;;;;1199:46:2;;:::i;4464:145::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;4464:145:2;-1:-1:-1;;;;;4464:145:2;;:::i;11296:198::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;11296:198:2;;;;;;;;:::i;7896:196::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;7896:196:2;;:::i;1170:25::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1170:25:2;;:::i;984:36::-;;;;;;;;;;;;;:::i;1701:29::-;;;;;;;;;;;;;:::i;876:33::-;;;;;;;;;;;;;:::i;6340:338::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;6340:338:2;;;;;;;:::i;16954:195::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;16954:195:2;;-1:-1:-1;;;;;16954:195:2;;;;;-1:-1:-1;;;;;16954:195:2;;:::i;18660:271::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;18660:271:2;;;;-1:-1:-1;;;;;18660:271:2;;;;;;;;;;;;:::i;1837:50::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;1837:50:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;1837:50:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1837:50:2;;-1:-1:-1;1837:50:2;;-1:-1:-1;;;;;1837:50:2:i;16737:213::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;16737:213:2;;-1:-1:-1;;;;;16737:213:2;;;;;-1:-1:-1;;;;;16737:213:2;;:::i;16351:201::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;16351:201:2;;-1:-1:-1;;;;;16351:201:2;;;;;-1:-1:-1;;;;;16351:201:2;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;469:29;;;;;;;;;;;;;:::i;834:37::-;;;;;;;;;;;;;:::i;8520:317::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;8520:317:2;;;;;;;:::i;10693:599::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;10693:599:2;;;;;;;;;;:::i;1586:33::-;;;;;;;;;;;;;:::i;5803:99::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;5803:99:2;-1:-1:-1;;;;;5803:99:2;;:::i;948:32::-;;;;;;;;;;;;;:::i;542:25::-;;;;;;;;;;;;;:::i;1787:46::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;1787:46:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;1787:46:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1787:46:2;;-1:-1:-1;1787:46:2;;-1:-1:-1;;;;;1787:46:2:i;613:38::-;;;;;;;;;;;;;:::i;8096:212::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;8096:212:2;;:::i;2010:50::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2010:50:2;-1:-1:-1;;;;;2010:50:2;;:::i;:::-;;;;-1:-1:-1;;;;;2010:50:2;;;;;;;;;;;;;;1395:46;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1395:46:2;-1:-1:-1;;;;;1395:46:2;;:::i;1073:28::-;;;;;;;;;;;;;:::i;1735:48::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;1735:48:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;1735:48:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1735:48:2;;-1:-1:-1;1735:48:2;;-1:-1:-1;;;;;1735:48:2:i;3910:140::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3910:140:2;-1:-1:-1;;;;;3910:140:2;;:::i;7688:204::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;7688:204:2;;:::i;1347:44::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1347:44:2;-1:-1:-1;;;;;1347:44:2;;:::i;6682:245::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;6682:245:2;;:::i;1624:25::-;;;;;;;;;;;;;:::i;1508:31::-;;;;;;;;;;;;;:::i;502:35::-;;;;;;;;;;;;;:::i;746:44::-;;;;;;;;;;;;;:::i;2285:1518::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;2285:1518:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;2285:1518:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;2285:1518:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2285:1518:2;;-1:-1:-1;2285:1518:2;;-1:-1:-1;;;;;2285:1518:2:i;12306:1172::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;12306:1172:2;;;;-1:-1:-1;;;;;12306:1172:2;;;;;;;;;;:::i;4260:200::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;4260:200:2;-1:-1:-1;;;;;4260:200:2;;:::i;4798:175::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;4798:175:2;-1:-1:-1;;;;;4798:175:2;;:::i;1891:54::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;1891:54:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;1891:54:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1891:54:2;;-1:-1:-1;1891:54:2;;-1:-1:-1;;;;;1891:54:2:i;19368:1048::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;19368:1048:2;;-1:-1:-1;;;;;19368:1048:2;;;;;-1:-1:-1;;;;;19368:1048:2;;:::i;700:42::-;;;;;;;;;;;;;:::i;914:29::-;;;;;;;;;;;;;:::i;15841:324::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;15841:324:2;;;;;;;;:::i;438:27::-;;;;;;;;;;;;;:::i;1445:29::-;;;;;;;;;;;;;:::i;571:37::-;;;;;;;;;;;;;:::i;5604:195::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;5604:195:2;;:::i;8312:204::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;8312:204:2;;:::i;1479:24::-;;;;;;;;;;;;;:::i;4977:211::-;;;;;;;;;;;;;:::i;9261:260::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;9261:260:2;;:::i;8841:202::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;8841:202:2;;:::i;6931:301::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;6931:301:2;;;;;;;;:::i;318:20::-;;;;;;;;;;;;;:::i;17819:304::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;17819:304:2;;-1:-1:-1;;;;;17819:304:2;;;;;-1:-1:-1;;;;;17819:304:2;;:::i;294:20::-;;;;;;;;;;;;;:::i;1297:46::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1297:46:2;-1:-1:-1;;;;;1297:46:2;;:::i;17323:136::-;-1:-1:-1;;;;;17402:20:2;;17383:4;17402:20;;;:12;:20;;;;;;;;:52;;;;-1:-1:-1;;;;;;17426:23:2;;;;;;:15;:23;;;;;;-1:-1:-1;;;;;17426:23:2;:28;17402:52;17395:59;17323:136;-1:-1:-1;;17323:136:2:o;9627:1062::-;9684:12;9702;9725:25;9739:10;9725:13;:25::i;:::-;9721:75;;;9760:29;9778:10;9760:17;:29::i;:::-;9835:10;9802:14;9819:27;;;:15;:27;;;;;;-1:-1:-1;;;;;9819:27:2;;:31;;9856:15;;9874:29;;9819:31;9874:9;:29::i;:::-;9856:47;;9914:6;9910:245;;;9937:22;;9974:18;;10017:14;;9937:22;;-1:-1:-1;9974:18:2;-1:-1:-1;10017:21:2;;10036:1;10017:18;:21::i;:::-;10000:14;:38;9910:245;;;10066:18;;10059:25;;10099:14;;10092:21;;10144:4;10121:16;10138:2;10121:20;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;10121:20:2;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;10121:20:2;;;;;;;;;;;;;;;;-1:-1:-1;10121:20:2;;;;;;;;;;:27;;-1:-1:-1;;10121:27:2;;;;;;;;;;;-1:-1:-1;;9910:245:2;10182:4;10169:9;:17;10161:41;;;;;-1:-1:-1;;;10161:41:2;;;;;;;;;;;;-1:-1:-1;;;10161:41:2;;;;;;;;;;;;;;;10237:12;10209:21;10231:2;10209:25;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;10209:25:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:40;;;;10279:14;;10255:17;10273:2;10255:21;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;10255:21:2;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;10255:21:2;;;;;;;;;;;;;;;;-1:-1:-1;10255:21:2;;;;;;;;;;:38;;;;-1:-1:-1;;10299:28:2;;10330:12;;10299:24;;:28;;10255:21;;;;10299:28;;;;;10255:21;10299:28;;;;;;;;;;;-1:-1:-1;;10299:28:2;;;;;;;;;;;;;;;;-1:-1:-1;;10299:28:2;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;10299:28:2;;;;;;;;;;;:43;;;;10394:10;-1:-1:-1;10378:27:2;;;:15;:27;;;;;;;;-1:-1:-1;;;;;10378:27:2;;;10299:28;10378:31;10348:61;-1:-1:-1;;;;;;10348:61:2;;;;;;-1:-1:-1;;10416:12:2;;-1:-1:-1;;;;;10416:12:2;;10438:9;10416:32;;;;;10438:9;;10299:28;-1:-1:-1;10299:28:2;10438:9;10416:12;:32;;;;;;;;;;;;;;;;;;;;-1:-1:-1;10454:11:2;;:57;;;-1:-1:-1;;;10454:57:2;;10479:10;10454:57;;;;10499:4;10454:57;;;;;;;;;;;;-1:-1:-1;;;;;10454:11:2;;;;:24;;:57;;;;;;;;;;;;;;;:11;;:57;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;10517:11:2;;10538:12;;10517:40;;;-1:-1:-1;;;10517:40:2;;-1:-1:-1;;;;;10538:12:2;;;10517:40;;;;;;;;;;;;:11;;;;;:20;;:40;;;;;10454:57;;10517:40;;;;;;;:11;;:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;10594:20:2;;;;10574:10;;10569:115;;10586:6;;10594:16;;10611:2;;10594:20;;;10517:40;10594:20;;;;;;;;;;;;;;;;-1:-1:-1;;10594:20:2;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;10594:20:2;;;;;;;;;;;;;;;;-1:-1:-1;10594:20:2;;;;;;;;;;;10653:29;;10623:25;;10594:20;;;;;-1:-1:-1;;;10623:60:2;;-1:-1:-1;10653:29:2;;10623:21;;:25;;10594:20;;;10623:25;;;;;10594:20;10623:25;;;;;;;;;;;-1:-1:-1;;10623:25:2;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;10623:25:2;;;;;;;;;;;;;;;;-1:-1:-1;10623:25:2;;;;;;;;;;;;;-1:-1:-1;10623:29:2;;-1:-1:-1;10623:60:2:i;:::-;10569:115;;;-1:-1:-1;;;;;10569:115:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9627:1062;;;;;:::o;795:35::-;;;;:::o;6010:326::-;6115:5;;;;;-1:-1:-1;;;;;6115:5:2;6101:10;:19;;:51;;-1:-1:-1;6138:14:2;;-1:-1:-1;;;;;6138:14:2;6124:10;:28;6101:51;:79;;;-1:-1:-1;6170:10:2;;-1:-1:-1;;;;;6170:10:2;6156;:24;6101:79;6093:104;;;;;-1:-1:-1;;;6093:104:2;;;;;;;;;;;;-1:-1:-1;;;6093:104:2;;;;;;;;;;;;;;;6211:16;6203:42;;;;;-1:-1:-1;;;6203:42:2;;;;;;;;;;;;-1:-1:-1;;;6203:42:2;;;;;;;;;;;;;;;6251:23;:35;;;;6292:25;:39;6010:326::o;4613:181::-;4671:12;;-1:-1:-1;;;;;4671:12:2;4657:10;:26;:54;;;;-1:-1:-1;4687:10:2;:24;;4657:54;4649:83;;;;;-1:-1:-1;;;4649:83:2;;;;;;;;;;;;-1:-1:-1;;;4649:83:2;;;;;;;;;;;;;;;4746:12;;;;4738:20;;-1:-1:-1;;;;;;4738:20:2;4746:12;-1:-1:-1;;;;;4746:12:2;;4738:20;;;;-1:-1:-1;;;;;;4764:25:2;;;4613:181::o;11498:655::-;11551:15;11569:29;11579:10;11591:6;11569:9;:29::i;:::-;11551:47;;11609:25;11623:10;11609:13;:25::i;:::-;11605:75;;;11644:29;11662:10;11644:17;:29::i;:::-;11694:33;11708:10;11720:6;11694:13;:33::i;:::-;11686:58;;;;;-1:-1:-1;;;11686:58:2;;;;;;;;;;;;-1:-1:-1;;;11686:58:2;;;;;;;;;;;;;;;11755:16;11772:2;11755:20;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;11755:20:2;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;11755:20:2;;;;;;;;;;;;;;;;-1:-1:-1;11755:20:2;;;;;;;;;;;;;11751:174;;-1:-1:-1;11751:174:2;;-1:-1:-1;11751:174:2;11806:17;;11793:9;:30;11785:54;;;;;-1:-1:-1;;;11785:54:2;;;;;;;;;;;;-1:-1:-1;;;11785:54:2;;;;;;;;;;;;;;;11751:174;;;11881:21;;11868:9;:34;11860:58;;;;;-1:-1:-1;;;11860:58:2;;;;;;;;;;;;-1:-1:-1;;;11860:58:2;;;;;;;;;;;;;;;11931:12;;:32;;-1:-1:-1;;;;;11931:12:2;;;;11953:9;11931:32;;;;;:12;:32;:12;:32;11953:9;11931:12;:32;;;;;;;;;;;;;;;;;;;;;11997:60;12027:29;;11997:21;12019:2;11997:25;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;11997:25:2;;;;;;;;;;;;:60;11969:21;11991:2;11969:25;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;11969:25:2;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;11969:25:2;;;;;;;;;;;;;;;;-1:-1:-1;11969:25:2;;;;;;;;;;:88;;;;-1:-1:-1;;12094:20:2;;12074:10;;12069:79;;12086:6;;12094:16;;:20;;11969:25;;;12094:20;;;;11969:25;12094:20;;;;;;;;;;;-1:-1:-1;;12094:20:2;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;12094:20:2;;;;;;;;;;;;;;;;-1:-1:-1;12094:20:2;;;;;;;;;;;12122:25;;12094:20;;;;;;;-1:-1:-1;12122:21:2;;-1:-1:-1;12122:25:2;;12094:20;;;;12122:25;;;;12094:20;12122:25;;;;;;;;;;;-1:-1:-1;;12122:25:2;;;;;;;;;;;;;;;;-1:-1:-1;;12122:25:2;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;12122:25:2;;;;;;;;;;;;-1:-1:-1;;;;;12069:79:2;;;;;;;;;;;;-1:-1:-1;;12069:79:2;;;;;;;;;;;;;;;;;;;;;;;11498:655;;:::o;1024:44::-;;;;:::o;1544:37::-;;;;:::o;1249:44::-;;;;;;;;;;;;;;;:::o;655:40::-;;;;:::o;1949:57::-;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;16169:178::-;16245:4;16257:15;16275:25;16285:6;16293;16275:9;:25::i;:::-;16257:43;;16341:1;16313:21;16335:2;16313:25;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;16313:25:2;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;16313:25:2;;;;;;;;;;;;;;;;-1:-1:-1;16313:25:2;;;;;;;;;;;:29;;;;;-1:-1:-1;;;;16169:178:2;;;;:::o;342:27::-;;;-1:-1:-1;;;;;342:27:2;;:::o;16556:177::-;16632:7;16647:15;16665:25;16675:6;16683;16665:9;:25::i;:::-;16647:43;;16703:21;16725:2;16703:25;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;16703:25:2;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;16703:25:2;;;;;;;;;;;;;;;;-1:-1:-1;16703:25:2;;;;;;;;;;;;16556:177;-1:-1:-1;;;;;;16556:177:2:o;17153:166::-;17226:4;17238:15;17256:25;17266:6;17274;17256:9;:25::i;:::-;17238:43;;17294:16;17311:2;17294:20;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;17294:20:2;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;17294:20:2;;;;;;;;;;;;;;;;-1:-1:-1;17294:20:2;;;;;;;;;;;;;;17153:166;-1:-1:-1;;;;;;17153:166:2:o;18127:529::-;18234:5;;;;;-1:-1:-1;;;;;18234:5:2;18220:10;:19;;:49;;-1:-1:-1;18257:12:2;;-1:-1:-1;;;;;18257:12:2;18243:10;:26;18220:49;:77;;;-1:-1:-1;18287:10:2;;-1:-1:-1;;;;;18287:10:2;18273;:24;18220:77;18212:99;;;;;-1:-1:-1;;;18212:99:2;;;;;;;;;;;;-1:-1:-1;;;18212:99:2;;;;;;;;;;;;;;;18317:15;18335:25;18345:6;18353;18335:9;:25::i;:::-;18317:43;;18371:8;:35;;;;;18384:18;18403:2;18384:22;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;18384:22:2;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;18384:22:2;;;;;;;;;;;;;;;;-1:-1:-1;18384:22:2;;;;;;;;;;;;;18383:23;;-1:-1:-1;;18371:35:2;18367:145;;;18433:14;;:21;;18452:1;18433:18;:21::i;:::-;18416:14;:38;;;;18493:12;18462:24;18487:2;18462:28;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;18462:28:2;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;18462:28:2;;;;;;;;;;;;;;;;-1:-1:-1;18462:28:2;;;;;;;;;;:43;;;;-1:-1:-1;;18367:145:2;18523:8;18522:9;:35;;;;;18535:18;18554:2;18535:22;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;18535:22:2;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;18535:22:2;;;;;;;;;;;;;;;;-1:-1:-1;18535:22:2;;;;;;;;;;;;;;-1:-1:-1;;18522:35:2;18518:94;;;18584:14;;:21;;18603:1;18584:18;:21::i;:::-;18567:14;:38;18518:94;18643:8;18618:18;18637:2;18618:22;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;18618:22:2;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;18618:22:2;;;;;;;;;;;;;;;;-1:-1:-1;18618:22:2;;;;;;;;;;:33;;-1:-1:-1;;18618:33:2;;;;;;;;;;;-1:-1:-1;;;;;;18127:529:2:o;373:25::-;;;-1:-1:-1;;;;;373:25:2;;:::o;1654:42::-;;;;;;;;;;;;;:::o;17463:352::-;17555:5;;;;;-1:-1:-1;;;;;17555:5:2;17541:10;:19;;:49;;-1:-1:-1;17578:12:2;;-1:-1:-1;;;;;17578:12:2;17564:10;:26;17541:49;:77;;;-1:-1:-1;17608:10:2;;-1:-1:-1;;;;;17608:10:2;17594;:24;17541:77;17533:99;;;;;-1:-1:-1;;;17533:99:2;;;;;;;;;;;;-1:-1:-1;;;17533:99:2;;;;;;;;;;;;;;;17639:15;17657:25;17667:6;17675;17657:9;:25::i;:::-;17639:43;;17713:4;17688:18;17707:2;17688:22;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;17688:22:2;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;17688:22:2;;;;;;;;;;;;;;;;-1:-1:-1;17688:22:2;;;;;;;;;;:29;;-1:-1:-1;;17688:29:2;;;;;;;;;;;-1:-1:-1;;17723:28:2;;17754:12;;17723:24;;:28;;17688:22;;;;17723:28;;;;;17688:22;17723:28;;;;;;;;;;;-1:-1:-1;;17723:28:2;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;17723:28:2;;;;;;;;;;;;;;;;-1:-1:-1;17723:28:2;;;;;;;;;;:43;;;;-1:-1:-1;;17789:14:2;;:21;;17723:28;17789:18;:21::i;:::-;17772:14;:38;-1:-1:-1;;;17463:352:2:o;13482:858::-;13572:7;13605:12;13591:11;:26;13587:40;;;-1:-1:-1;13626:1:2;13619:8;;13587:40;-1:-1:-1;;;;;13637:32:2;;;;;;:24;:32;;;;;;13633:51;;-1:-1:-1;13683:1:2;13676:8;;13633:51;-1:-1:-1;;;;;13708:32:2;;;;;;:24;:32;;;;;;13694:46;;13690:60;;;-1:-1:-1;13749:1:2;13742:8;;13690:60;13760:14;;13756:33;;-1:-1:-1;13788:1:2;13781:8;;13756:33;-1:-1:-1;;;;;13833:32:2;;13795:19;13833:32;;;:24;:32;;;;;;13817:49;;:11;;:15;:49::i;:::-;-1:-1:-1;;;;;13936:20:2;;13872:23;13936:20;;;:12;:20;;;;;;13795:71;;-1:-1:-1;13872:23:2;;;13936:20;;13932:258;;;-1:-1:-1;;13984:27:2;;14039:29;;13932:258;;;-1:-1:-1;;14107:23:2;;14158:25;;13932:258;14195:28;14226:55;14263:17;14226:32;:11;14242:15;14226;:32::i;:::-;:36;;:55::i;:::-;14195:86;;14295:40;14320:14;;14295:20;:24;;:40;;;;:::i;:::-;14288:47;13482:858;-1:-1:-1;;;;;;;13482:858:2:o;5298:88::-;5342:16;5373:8;5366:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;5366:15:2;;;;;;;;;;;;;;;;;;;;;;;5298:88;:::o;5390:105::-;-1:-1:-1;;;;;5470:20:2;5451:4;5470:20;;;:12;:20;;;;;;;;;5390:105::o;9047:210::-;9132:5;;;;;-1:-1:-1;;;;;9132:5:2;9118:10;:19;;:51;;-1:-1:-1;9155:14:2;;-1:-1:-1;;;;;9155:14:2;9141:10;:28;9118:51;:79;;;-1:-1:-1;9187:10:2;;-1:-1:-1;;;;;9187:10:2;9173;:24;9118:79;9110:104;;;;;-1:-1:-1;;;9110:104:2;;;;;;;;;;;;-1:-1:-1;;;9110:104:2;;;;;;;;;;;;;;;9220:21;:32;9047:210::o;14344:1493::-;14436:15;14454:29;14464:10;14476:6;14454:9;:29::i;:::-;14436:47;;14494:25;14508:10;14494:13;:25::i;:::-;14490:75;;;14529:29;14547:10;14529:17;:29::i;:::-;14571:26;14600:24;14625:2;14600:28;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;14600:28:2;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;14600:28:2;;;;;;;;;;;;;;;;-1:-1:-1;14600:28:2;;;;;;;;;;;:33;;;-1:-1:-1;14600:92:2;;-1:-1:-1;14600:92:2;14667:21;14689:2;14667:25;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;14667:25:2;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;14667:25:2;;;;;;;;;;;;;;;;-1:-1:-1;14667:25:2;;;;;;;;;;;;-1:-1:-1;14600:92:2;;-1:-1:-1;14600:92:2;;14636:24;14661:2;14636:28;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;14636:28:2;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;14636:28:2;;;;;;;;;;;;;;;;-1:-1:-1;14636:28:2;;;;;;;;;;;;-1:-1:-1;;14600:92:2;14571:121;;14698:23;14724:21;14746:2;14724:25;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;14724:25:2;;;;;;;;;;;;;;;;-1:-1:-1;;14724:25:2;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;14724:25:2;;;;;;;;;;;;-1:-1:-1;;;14764:23:2;14756:49;;;;;-1:-1:-1;;;14756:49:2;;;;;;;;;;;;-1:-1:-1;;;14756:49:2;;;;;;;;;;;;;;;14834:12;14819:11;:27;;14811:53;;;;;-1:-1:-1;;;14811:53:2;;;;;;;;;;;;-1:-1:-1;;;14811:53:2;;;;;;;;;;;;;;;14892:18;14878:11;:32;14870:53;;;;;-1:-1:-1;;;14870:53:2;;;;;;;;;;;;-1:-1:-1;;;14870:53:2;;;;;;;;;;;;;;;14938:16;14955:2;14938:20;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;14938:20:2;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;14938:20:2;;;;;;;;;;;;;;;;-1:-1:-1;14938:20:2;;;;;;;;;;;;;14937:21;;-1:-1:-1;14937:21:2;;-1:-1:-1;14937:47:2;;;14962:18;14981:2;14962:22;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;14962:22:2;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;14962:22:2;;;;;;;;;;;;;;;;-1:-1:-1;14962:22:2;;;;;;;;;;;;;;-1:-1:-1;;14937:47:2;14929:70;;;;;-1:-1:-1;;;14929:70:2;;;;;;;;;;;;-1:-1:-1;;;14929:70:2;;;;;;;;;;;;;;;15019:16;15036:2;15019:20;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;15019:20:2;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;15019:20:2;;;;;;;;;;;;;;;;-1:-1:-1;15019:20:2;;;;;;;;;;;;;15018:21;;-1:-1:-1;;15018:51:2;;;;-1:-1:-1;15043:21:2;;:26;;15018:51;15017:105;;;;15075:16;15092:2;15075:20;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;15075:20:2;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;15075:20:2;;;;;;;;;;;;;;;;-1:-1:-1;15075:20:2;;;;;;;;;;;;;;-1:-1:-1;;15075:46:2;;;;-1:-1:-1;15099:17:2;;:22;;15075:46;15006:222;;;15179:29;;15159:50;;:15;;:19;:50::i;:::-;15145:11;:64;15137:84;;;;;-1:-1:-1;;;15137:84:2;;;;;;;;;;;;-1:-1:-1;;;15137:84:2;;;;;;;;;;;;;;;15234:14;15251:49;15268:10;15280:6;15288:11;15251:16;:49::i;:::-;15234:66;;15323:1;15314:6;:10;15306:32;;;;;-1:-1:-1;;;15306:32:2;;;;;;;;;;;;-1:-1:-1;;;15306:32:2;;;;;;;;;;;;;;;15345:11;15359:60;15396:22;;15359:32;15370:20;;15359:6;:10;;:32;;;;:::i;:60::-;15345:74;;15446:3;15433:9;:16;15425:40;;;;;-1:-1:-1;;;15425:40:2;;;;;;;;;;;;-1:-1:-1;;;15425:40:2;;;;;;;;;;;;;;;15472:12;;:32;;-1:-1:-1;;;;;15472:12:2;;;;15494:9;15472:32;;;;;:12;:32;:12;:32;15494:9;15472:12;:32;;;;;;;;;;;;;;;;;;;;;15515:12;15511:188;;;15537:11;;15565:10;;15537:48;;;-1:-1:-1;;;15537:48:2;;-1:-1:-1;;;;;15565:10:2;;;15537:48;;;;;;;;;;;;:11;;;;;:19;;:48;;;;;;;;;;;;;;:11;;:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;15593:10:2;;:38;;;-1:-1:-1;;;15593:38:2;;15612:10;15593:38;;;;;;;;;;;;-1:-1:-1;;;;;15593:10:2;;;;:18;;:38;;;;;:10;;:38;;;;;;;;:10;;:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15511:188;;;15652:11;;:40;;;-1:-1:-1;;;15652:40:2;;15673:10;15652:40;;;;;;;;;;;;-1:-1:-1;;;;;15652:11:2;;;;:20;;:40;;;;;;;;;;;;;;;:11;;:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;15511:188:2;15721:13;;:25;;15739:6;15721:17;:25::i;:::-;15705:13;:41;;;;15783:11;15752:24;15777:2;15752:28;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;15752:28:2;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;15752:28:2;;;;;;;;;;;;;;;;-1:-1:-1;15752:28:2;;;;;;;;;;;:42;;;;15805:27;;;;;15813:10;;15805:27;;;;;;;-1:-1:-1;15805:27:2;-1:-1:-1;15805:27:2;14344:1493;;;;;;;;:::o;12157:145::-;12229:7;12251:46;12268:6;12276;12284:12;12251:16;:46::i;:::-;12244:53;12157:145;-1:-1:-1;;;12157:145:2:o;4054:202::-;-1:-1:-1;;;;;4132:31:2;;4124:48;;;;;-1:-1:-1;;;4124:48:2;;;;;;;;;;;;;;;-1:-1:-1;;;4124:48:2;;;;;;;;;;;;;;;4200:10;;-1:-1:-1;;;;;4200:10:2;4186;:24;4178:33;;;;;;4217:14;:34;;-1:-1:-1;;;;;;4217:34:2;-1:-1:-1;;;;;4217:34:2;;;;;;;;;;4054:202::o;7236:346::-;7282:13;;;;7281:14;7273:42;;;;;-1:-1:-1;;;7273:42:2;;;;;;;;;;;;-1:-1:-1;;;7273:42:2;;;;;;;;;;;;;;;7343:10;;-1:-1:-1;;;;;7343:10:2;7329;:24;7321:49;;;;;-1:-1:-1;;;7321:49:2;;;;;;;;;;;;-1:-1:-1;;;7321:49:2;;;;;;;;;;;;;;;7495:11;;7516:10;;7495:56;;;-1:-1:-1;;;7495:56:2;;-1:-1:-1;;;;;7516:10:2;;;7495:56;;;;7528:22;7495:56;;;;;;:11;;;;;:20;;:56;;;;;;;;;;;;;;:11;;:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;7557:13:2;:20;;-1:-1:-1;;7557:20:2;7573:4;7557:20;;;7236:346::o;402:32::-;;;-1:-1:-1;;;;;402:32:2;;:::o;1106:59::-;;;;;;;;;;;;;:::o;1199:46::-;;;;;;;;;;;;;:::o;4464:145::-;4549:5;;;;;-1:-1:-1;;;;;4549:5:2;4535:10;:19;4527:41;;;;;-1:-1:-1;;;4527:41:2;;;;;;;;;;;;-1:-1:-1;;;4527:41:2;;;;;;;;;;;;;;;4574:12;:30;;-1:-1:-1;;;;;;4574:30:2;-1:-1:-1;;;;;4574:30:2;;;;;;;;;;4464:145::o;11296:198::-;11382:5;;;;;-1:-1:-1;;;;;11382:5:2;11368:10;:19;;:49;;-1:-1:-1;11405:12:2;;-1:-1:-1;;;;;11405:12:2;11391:10;:26;11368:49;:77;;;-1:-1:-1;11435:10:2;;-1:-1:-1;;;;;11435:10:2;11421;:24;11368:77;11360:99;;;;;-1:-1:-1;;;11360:99:2;;;;;;;;;;;;-1:-1:-1;;;11360:99:2;;;;;;;;;;;;;;;-1:-1:-1;;;;;11466:15:2;;;;;;;:7;:15;;;;;:23;11296:198::o;7896:196::-;7974:5;;;;;-1:-1:-1;;;;;7974:5:2;7960:10;:19;;:51;;-1:-1:-1;7997:14:2;;-1:-1:-1;;;;;7997:14:2;7983:10;:28;7960:51;:79;;;-1:-1:-1;8029:10:2;;-1:-1:-1;;;;;8029:10:2;8015;:24;7960:79;7952:104;;;;;-1:-1:-1;;;7952:104:2;;;;;;;;;;;;-1:-1:-1;;;7952:104:2;;;;;;;;;;;;;;;8062:14;:25;7896:196::o;1170:25::-;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1170:25:2;;-1:-1:-1;1170:25:2;:::o;984:36::-;;;;:::o;1701:29::-;;;;:::o;876:33::-;;;;:::o;6340:338::-;6449:5;;;;;-1:-1:-1;;;;;6449:5:2;6435:10;:19;;:51;;-1:-1:-1;6472:14:2;;-1:-1:-1;;;;;6472:14:2;6458:10;:28;6435:51;:79;;;-1:-1:-1;6504:10:2;;-1:-1:-1;;;;;6504:10:2;6490;:24;6435:79;6427:104;;;;;-1:-1:-1;;;6427:104:2;;;;;;;;;;;;-1:-1:-1;;;6427:104:2;;;;;;;;;;;;;;;6545:16;6537:42;;;;;-1:-1:-1;;;6537:42:2;;;;;;;;;;;;-1:-1:-1;;;6537:42:2;;;;;;;;;;;;;;;6585:27;:39;;;;6630:29;:43;6340:338::o;16954:195::-;17029:4;17041:15;17059:25;17069:6;17077;17059:9;:25::i;:::-;17041:43;;17097:18;17116:2;17097:22;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;17097:22:2;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;17097:22:2;;;;;;;;;;;;;;;;-1:-1:-1;17097:22:2;;;;;;;;;;;;;;-1:-1:-1;17097:22:2;;-1:-1:-1;17097:47:2;;;17124:16;17141:2;17124:20;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;17124:20:2;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;17124:20:2;;;;;;;;;;;;;;;;-1:-1:-1;17124:20:2;;;;;;;;;;;;;17123:21;;-1:-1:-1;;17097:47:2;17090:54;16954:195;-1:-1:-1;;;;16954:195:2:o;18660:271::-;18763:5;;;;;-1:-1:-1;;;;;18763:5:2;18749:10;:19;;:49;;-1:-1:-1;18786:12:2;;-1:-1:-1;;;;;18786:12:2;18772:10;:26;18749:49;:77;;;-1:-1:-1;18816:10:2;;-1:-1:-1;;;;;18816:10:2;18802;:24;18749:77;18741:99;;;;;-1:-1:-1;;;18741:99:2;;;;;;;;;;;;-1:-1:-1;;;18741:99:2;;;;;;;;;;;;;;;18846:15;18864:25;18874:6;18882;18864:9;:25::i;:::-;18846:43;;18920:6;18919:7;18896:16;18913:2;18896:20;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;18896:20:2;;;;;;;;;;;;1837:50;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;16737:213::-;16810:7;16825:15;16843:25;16853:6;16861;16843:9;:25::i;:::-;16825:43;;16881:16;16898:2;16881:20;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;16881:20:2;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;16881:20:2;;;;;;;;;;;;;;;;-1:-1:-1;16881:20:2;;;;;;;;;;;;;;-1:-1:-1;16881:64:2;;-1:-1:-1;16881:64:2;16924:21;;16881:64;;;-1:-1:-1;;16904:17:2;;;16737:213;-1:-1:-1;;16737:213:2:o;16351:201::-;16423:12;16443:10;-1:-1:-1;;;;;16456:11:2;;:50;;-1:-1:-1;;;;;16479:23:2;;;;;;:15;:23;;;;;;-1:-1:-1;;;;;16479:23:2;;:27;16456:50;;;16470:6;16456:50;16519:28;;;;;;;;-1:-1:-1;;16519:28:2;;;;;;;;;;-1:-1:-1;;;;;;16519:28:2;;;;;;;;;;;;;;;;;;;;-1:-1:-1;16519:28:2;;16351:201;-1:-1:-1;;16351:201:2:o;469:29::-;;;-1:-1:-1;;;;;469:29:2;;:::o;834:37::-;;;;:::o;8520:317::-;8622:5;;;;;-1:-1:-1;;;;;8622:5:2;8608:10;:19;;:51;;-1:-1:-1;8645:14:2;;-1:-1:-1;;;;;8645:14:2;8631:10;:28;8608:51;:79;;;-1:-1:-1;8677:10:2;;-1:-1:-1;;;;;8677:10:2;8663;:24;8608:79;8600:104;;;;;-1:-1:-1;;;8600:104:2;;;;;;;;;;;;-1:-1:-1;;;8600:104:2;;;;;;;;;;;;;;;8718:16;8710:42;;;;;-1:-1:-1;;;8710:42:2;;;;;;;;;;;;-1:-1:-1;;;8710:42:2;;;;;;;;;;;;;;;8758:20;:32;;;;8796:22;:36;8520:317::o;10693:599::-;10788:5;;;;;-1:-1:-1;;;;;10788:5:2;10774:10;:19;;:49;;-1:-1:-1;10811:12:2;;-1:-1:-1;;;;;10811:12:2;10797:10;:26;10774:49;:77;;;-1:-1:-1;10841:10:2;;-1:-1:-1;;;;;10841:10:2;10827;:24;10774:77;10766:99;;;;;-1:-1:-1;;;10766:99:2;;;;;;;;;;;;-1:-1:-1;;;10766:99:2;;;;;;;;;;;;;;;-1:-1:-1;;;;;10887:19:2;;10871:13;10887:19;;;:11;:19;;;;;;10920:8;:15;;10887:19;;;;;10920:15;;;;;;;;;;;;;;;;-1:-1:-1;;;;;10920:15:2;:25;10912:52;;;;;-1:-1:-1;;;10912:52:2;;;;;;;;;;;;-1:-1:-1;;;10912:52:2;;;;;;;;;;;;;;;-1:-1:-1;;;;;10978:20:2;;;;;;:12;:20;;;;;;;;:30;;;;;;;10970:54;;;;;-1:-1:-1;;;10970:54:2;;;;;;;;;;;;-1:-1:-1;;;10970:54:2;;;;;;;;;;;;;;;-1:-1:-1;;;;;11030:20:2;;;;;;:12;:20;;;;;:29;;-1:-1:-1;;11030:29:2;;;;;;;;;;;;11065:223;;11102:14;;:21;;11121:1;11102:18;:21::i;:::-;11085:14;:38;-1:-1:-1;;;;;11131:32:2;;;;;;:24;:32;;;;;11166:12;11131:47;;11065:223;;;11216:14;;:21;;11235:1;11216:18;:21::i;:::-;11199:14;:38;-1:-1:-1;;;;;11245:32:2;;11280:1;11245:32;;;:24;:32;;;;;:36;11065:223;10693:599;;;:::o;1586:33::-;;;;:::o;5803:99::-;-1:-1:-1;;;;;5882:15:2;5860:7;5882:15;;;:7;:15;;;;;;;5803:99::o;948:32::-;;;;:::o;542:25::-;;;-1:-1:-1;;;;;542:25:2;;:::o;1787:46::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;613:38::-;;;;:::o;8096:212::-;8182:5;;;;;-1:-1:-1;;;;;8182:5:2;8168:10;:19;;:51;;-1:-1:-1;8205:14:2;;-1:-1:-1;;;;;8205:14:2;8191:10;:28;8168:51;:79;;;-1:-1:-1;8237:10:2;;-1:-1:-1;;;;;8237:10:2;8223;:24;8168:79;8160:104;;;;;-1:-1:-1;;;8160:104:2;;;;;;;;;;;;-1:-1:-1;;;8160:104:2;;;;;;;;;;;;;;;8270:22;:33;8096:212::o;2010:50::-;;;;;;;;;;;;-1:-1:-1;;;;;2010:50:2;;:::o;1395:46::-;;;;;;;;;;;;;:::o;1073:28::-;;;;:::o;1735:48::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;3910:140::-;3998:10;;-1:-1:-1;;;;;3998:10:2;3984;:24;3976:33;;;;;;4015:12;:30;;-1:-1:-1;;;;;;4015:30:2;-1:-1:-1;;;;;4015:30:2;;;;;;;;;;3910:140::o;7688:204::-;7770:5;;;;;-1:-1:-1;;;;;7770:5:2;7756:10;:19;;:51;;-1:-1:-1;7793:14:2;;-1:-1:-1;;;;;7793:14:2;7779:10;:28;7756:51;:79;;;-1:-1:-1;7825:10:2;;-1:-1:-1;;;;;7825:10:2;7811;:24;7756:79;7748:104;;;;;-1:-1:-1;;;7748:104:2;;;;;;;;;;;;-1:-1:-1;;;7748:104:2;;;;;;;;;;;;;;;7858:18;:29;7688:204::o;1347:44::-;;;;;;;;;;;;;;;:::o;6682:245::-;6750:10;;-1:-1:-1;;;;;6750:10:2;6736;:24;6728:49;;;;;-1:-1:-1;;;6728:49:2;;;;;;;;;;;;-1:-1:-1;;;6728:49:2;;;;;;;;;;;;;;;6800:1;6791:6;:10;6783:27;;;;;-1:-1:-1;;;6783:27:2;;;;;;;;;;;;;;;-1:-1:-1;;;6783:27:2;;;;;;;;;;;;;;;6816:11;;:59;;;-1:-1:-1;;;6816:59:2;;6841:10;6816:59;;;;6861:4;6816:59;;;;;;;;;;;;-1:-1:-1;;;;;6816:11:2;;;;:24;;:59;;;;;;;;;;;;;;;:11;;:59;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;6897:13:2;;:25;;6915:6;6897:17;:25::i;:::-;6881:13;:41;-1:-1:-1;6682:245:2:o;1624:25::-;;;;;;:::o;1508:31::-;;;;:::o;502:35::-;;;-1:-1:-1;;;;;502:35:2;;:::o;746:44::-;;;;:::o;2285:1518::-;2923:8;;;;2922:9;2914:31;;;;;-1:-1:-1;;;2914:31:2;;;;;;;;;;;;-1:-1:-1;;;2914:31:2;;;;;;;;;;;;;;;2972:18;2951:11;;:40;;;;;-1:-1:-1;;;;;2951:40:2;;;;;-1:-1:-1;;;;;2951:40:2;;;;;;3030:17;2997:10;;:51;;;;;-1:-1:-1;;;;;2997:51:2;;;;;-1:-1:-1;;;;;2997:51:2;;;;;;3062:12;3054:5;;:20;;;;;-1:-1:-1;;;;;3054:20:2;;;;;-1:-1:-1;;;;;3054:20:2;;;;;;3093:17;3080:10;;:30;;;;;-1:-1:-1;;;;;3080:30:2;;;;;-1:-1:-1;;;;;3080:30:2;;;;;;3142:28;3116:23;:54;;;;3204:30;3176:25;:58;;;;3270:32;3240:27;:62;;;;3340:34;3308:29;:66;;;;3401:23;3380:18;:44;;;;3447:19;3430:14;:36;;;;3492:22;3472:17;:42;;;;3544:26;3520:21;:50;;;;3599:25;3576:20;:48;;;;3655:27;3630:22;:52;;;;3720:34;3688:29;:66;;;;3773:4;3760:10;:17;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;3783:8:2;:15;;-1:-1:-1;;3783:15:2;3794:4;3783:15;;;-1:-1:-1;;;;;;;;;;;;;;;2285:1518:2:o;12306:1172::-;12406:7;12421:15;12439:25;12449:6;12457;12439:9;:25::i;:::-;12421:43;;12475:21;12489:6;12475:13;:21::i;:::-;12471:92;;;12513:43;12536:6;12544:11;12513:22;:43::i;:::-;12506:50;;;;;12471:92;12569:26;12598:24;12623:2;12598:28;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;12598:28:2;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;12598:28:2;;;;;;;;;;;;;;;;-1:-1:-1;12598:28:2;;;;;;;;;;;:33;;;-1:-1:-1;12598:92:2;;-1:-1:-1;12598:92:2;12665:21;12687:2;12665:25;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;12665:25:2;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;12665:25:2;;;;;;;;;;;;;;;;-1:-1:-1;12665:25:2;;;;;;;;;;;;-1:-1:-1;12598:92:2;;-1:-1:-1;12598:92:2;;12634:24;12659:2;12634:28;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;12634:28:2;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;12634:28:2;;;;;;;;;;;;;;;;-1:-1:-1;12634:28:2;;;;;;;;;;;;-1:-1:-1;;12598:92:2;12569:121;;12715:12;12701:11;:26;12697:40;;;12736:1;12729:8;;;;;;12697:40;12747:23;12743:37;;12779:1;12772:8;;;;;;12743:37;12804:18;12790:11;:32;12786:46;;;12831:1;12824:8;;;;;;12786:46;12842:14;;12838:33;;12870:1;12863:8;;;;;;12838:33;12881:16;12898:2;12881:20;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;12881:20:2;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;12881:20:2;;;;;;;;;;;;;;;;-1:-1:-1;12881:20:2;;;;;;;;;;;;;;-1:-1:-1;;12881:47:2;;;;;12906:18;12925:2;12906:22;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;12906:22:2;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;12906:22:2;;;;;;;;;;;;;;;;-1:-1:-1;12906:22:2;;;;;;;;;;;;;12905:23;;-1:-1:-1;;12881:47:2;12877:61;;;12937:1;12930:8;;;;;;12877:61;12945:19;12967:35;:11;12983:18;12967:15;:35::i;:::-;12945:57;;13008:23;13037:25;13073:16;13090:2;13073:20;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;13073:20:2;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;13073:20:2;;;;;;;;;;;;;;;;-1:-1:-1;13073:20:2;;;;;;;;;;;;;13069:258;;-1:-1:-1;13069:258:2;;-1:-1:-1;13069:258:2;-1:-1:-1;;13121:23:2;;13172:25;;13069:258;;;-1:-1:-1;;13236:27:2;;13291:29;;13069:258;13333:28;13364:55;13401:17;13364:32;:11;13380:15;13364;:32::i;:55::-;13333:86;;13433:40;13458:14;;13433:20;:24;;:40;;;;:::i;:::-;13426:47;12306:1172;-1:-1:-1;;;;;;;;;;12306:1172:2:o;4260:200::-;-1:-1:-1;;;;;4342:29:2;;4334:46;;;;;-1:-1:-1;;;4334:46:2;;;;;;;;;;;;;;;-1:-1:-1;;;4334:46:2;;;;;;;;;;;;;;;4408:10;;-1:-1:-1;;;;;4408:10:2;4394;:24;4386:33;;;;;;4425:12;:30;;-1:-1:-1;;;;;;4425:30:2;-1:-1:-1;;;;;4425:30:2;;;;;;;;;;4260:200::o;4798:175::-;4893:10;;-1:-1:-1;;;;;4893:10:2;4879;:24;4871:51;;;;;-1:-1:-1;;;4871:51:2;;;;;;;;;;;;-1:-1:-1;;;4871:51:2;;;;;;;;;;;;;;;4928:17;:40;;-1:-1:-1;;;;;;4928:40:2;-1:-1:-1;;;;;4928:40:2;;;;;;;;;;4798:175::o;1891:54::-;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;19368:1048::-;19434:25;19448:10;19434:13;:25::i;:::-;19430:75;;;19469:29;19487:10;19469:17;:29::i;:::-;19519:33;19533:10;19545:6;19519:13;:33::i;:::-;19511:58;;;;;-1:-1:-1;;;19511:58:2;;;;;;;;;;;;-1:-1:-1;;;19511:58:2;;;;;;;;;;;;;;;-1:-1:-1;;;;;19595:19:2;;19576:16;19595:19;;;:15;:19;;;;;;-1:-1:-1;;;;;19595:19:2;;:23;19624:19;19646:29;19656:10;19668:6;19646:9;:29::i;:::-;19624:51;;19681:17;19701:23;19711:2;19715:8;19701:9;:23::i;:::-;19681:43;;19794:18;19813:6;19794:26;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;19794:26:2;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;19794:26:2;;;;;;;;;;;;;;;;-1:-1:-1;19794:26:2;;;;;;;;;;;19767:24;;19794:26;;;;;19767:18;;-1:-1:-1;19767:24:2;;-1:-1:-1;19794:26:2;;;19767:24;;;;;19794:26;19767:24;;;;;;;;;;;-1:-1:-1;;19767:24:2;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;19767:24:2;;;;;;;;;;;;;;;;-1:-1:-1;19767:24:2;;;;;;;;;;:53;;-1:-1:-1;;19767:53:2;;;;;;;;;;;-1:-1:-1;;19851:24:2;;:16;;:24;;19767;;;19851;;;;19767;19851;;;;;;;;;;;-1:-1:-1;;19851:24:2;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;19851:24:2;;;;;;;;;;;;;;;;-1:-1:-1;19851:24:2;;;;;;;;;;;19826:22;;19851:24;;;;;19826:16;;-1:-1:-1;19826:22:2;;-1:-1:-1;19851:24:2;;;19826:22;;;;;19851:24;19826:22;;;;;;;;;;;-1:-1:-1;;19826:22:2;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;19826:22:2;;;;;;;;;;;;;;;;-1:-1:-1;19826:22:2;;;;;;;;;;:49;;-1:-1:-1;;19826:49:2;;;;;;;;;;;-1:-1:-1;;19911:29:2;;:21;;:29;;19826:22;;;19911:29;;;;19826:22;19911:29;;;;;;;;;;;-1:-1:-1;;19911:29:2;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;19911:29:2;;;;;;;;;;;;;;;;-1:-1:-1;19911:29:2;;;;;;;;;;;19881:27;;19911:29;;19881:21;;-1:-1:-1;19881:27:2;;-1:-1:-1;19911:29:2;;;19881:27;;;;;19911:29;19881:27;;;;;;;;;;;-1:-1:-1;;19881:27:2;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;19881:27:2;;;;;;;;;;;;;;;;-1:-1:-1;19881:27:2;;;;;;;;;;:59;;;;-1:-1:-1;;19979:32:2;;:24;;:32;;19881:27;;;19979:32;;;;19881:27;19979:32;;;;;;;;;;;-1:-1:-1;;19979:32:2;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;19979:32:2;;;;;;;;;;;;;;;;-1:-1:-1;19979:32:2;;;;;;;;;;;19946:30;;19979:32;;19946:24;;-1:-1:-1;19946:30:2;;-1:-1:-1;19979:32:2;;;19946:30;;;;;19979:32;19946:30;;;;;;;;;;;-1:-1:-1;;19946:30:2;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;19946:30:2;;;;;;;;;;;;;;;;-1:-1:-1;19946:30:2;;;;;;;;;;:65;;;;-1:-1:-1;;20043:25:2;;:17;;:25;;19946:30;;;20043:25;;;;19946:30;20043:25;;;;;;;;;;;-1:-1:-1;;20043:25:2;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;20043:25:2;;;;;;;;;;;;;;;;-1:-1:-1;20043:25:2;;;;;;;;;;;20017:23;;20043:25;;20017:17;;-1:-1:-1;20017:23:2;;-1:-1:-1;20043:25:2;;;20017:23;;;;;20043:25;20017:23;;;;;;;;;;;-1:-1:-1;;20017:23:2;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;20017:23:2;;;;;;;;;;;;;;;;-1:-1:-1;20017:23:2;;;;;;;;;;;:51;;;;-1:-1:-1;;;;;20096:19:2;;-1:-1:-1;20096:19:2;;;:15;:19;;;;;;;-1:-1:-1;;;;;;20074:45:2;;20017:23;-1:-1:-1;;;;;20096:19:2;;;:23;20074:45;;;;;;20149:26;;:18;;:26;;-1:-1:-1;20017:23:2;-1:-1:-1;20017:23:2;;20149:26;;;;20017:23;20149:26;;;;;;;;;;;-1:-1:-1;;20149:26:2;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;20149:26:2;;;;;;;;;;;;;;;;-1:-1:-1;20149:26:2;;;;;;;;;;:34;;-1:-1:-1;;20149:34:2;;;;;;;;;;;-1:-1:-1;;20189:29:2;;-1:-1:-1;;20189:21:2;;:29;;20149:26;;;;20189:29;;;;;20149:26;20189:29;;;;;;;;;;;-1:-1:-1;;20189:29:2;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;20189:29:2;;;;;;;;;;;;;;;;-1:-1:-1;20189:29:2;;;;;;;;;;:33;;;;-1:-1:-1;;20228:32:2;;-1:-1:-1;;20228:24:2;;:32;;20189:29;;;;20228:32;;;;;20189:29;20228:32;;;;;;;;;;;-1:-1:-1;;20228:32:2;;;;;;;;;;;;;;;;-1:-1:-1;;20228:32:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:36;;;;20316:10;-1:-1:-1;20300:27:2;;;:15;:27;;;;;;;;-1:-1:-1;;;;;20300:27:2;;;:31;;;20270:61;;;-1:-1:-1;;;;;;20270:61:2;;;;;;;;;;-1:-1:-1;20386:24:2;;-1:-1:-1;;;;;20343:68:2;;;20316:10;20343:68;;-1:-1:-1;20368:6:2;;-1:-1:-1;20376:8:2;;20386:16;;20403:6;;20228:32;;;20386:24;;;;;20228:32;20386:24;;;;;;;;;;;-1:-1:-1;;20386:24:2;;;;;;;;;;;;;;;;-1:-1:-1;;20386:24:2;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;20386:24:2;;;;;;;;;;;;-1:-1:-1;;;;;20343:68:2;;;;;;;;;;;;;-1:-1:-1;;20386:24:2;;;;20343:68;;;;;;;;;;;;;;;;19368:1048;;;;;:::o;700:42::-;;;;:::o;914:29::-;;;;:::o;15841:324::-;15921:7;;15982:1;15965:172;-1:-1:-1;;;;;15990:23:2;;;;;;:15;:23;;;;;;-1:-1:-1;;;;;15990:23:2;;;15985:28;;;;15965:172;;16041:89;16056:73;16073:6;16081:1;16098;16084:11;:15;:44;;16116:12;16084:44;;;16102:11;16084:44;16056:16;:73::i;:::-;16041:10;;:14;:89::i;:::-;16028:102;-1:-1:-1;16015:3:2;;15965:172;;;-1:-1:-1;16150:10:2;15841:324;-1:-1:-1;;;15841:324:2:o;438:27::-;;;-1:-1:-1;;;;;438:27:2;;:::o;1445:29::-;;;;:::o;571:37::-;;;-1:-1:-1;;;;;571:37:2;;:::o;5604:195::-;5684:5;;;;;-1:-1:-1;;;;;5684:5:2;5670:10;:19;;:51;;-1:-1:-1;5707:14:2;;-1:-1:-1;;;;;5707:14:2;5693:10;:28;5670:51;:79;;;-1:-1:-1;5739:10:2;;-1:-1:-1;;;;;5739:10:2;5725;:24;5670:79;5662:104;;;;;-1:-1:-1;;;5662:104:2;;;;;;;;;;;;-1:-1:-1;;;5662:104:2;;;;;;;;;;;;;;;5772:14;:22;5604:195::o;8312:204::-;8394:5;;;;;-1:-1:-1;;;;;8394:5:2;8380:10;:19;;:51;;-1:-1:-1;8417:14:2;;-1:-1:-1;;;;;8417:14:2;8403:10;:28;8380:51;:79;;;-1:-1:-1;8449:10:2;;-1:-1:-1;;;;;8449:10:2;8435;:24;8380:79;8372:104;;;;;-1:-1:-1;;;8372:104:2;;;;;;;;;;;;-1:-1:-1;;;8372:104:2;;;;;;;;;;;;;;;8482:18;:29;8312:204::o;1479:24::-;;;;;;;;;;;;;;;-1:-1:-1;;1479:24:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;4977:211::-;5040:17;;-1:-1:-1;;;;;5040:17:2;5026:10;:31;:59;;;;-1:-1:-1;5061:10:2;:24;;5026:59;5018:93;;;;;-1:-1:-1;;;5018:93:2;;;;;;;;;;;;-1:-1:-1;;;5018:93:2;;;;;;;;;;;;;;;5130:17;;;5117:10;:30;;-1:-1:-1;;;;;;5117:30:2;;;-1:-1:-1;;;;;5130:17:2;;5117:30;;;;5153;;;4977:211::o;9261:260::-;9357:5;;;;;-1:-1:-1;;;;;9357:5:2;9343:10;:19;;:51;;-1:-1:-1;9380:14:2;;-1:-1:-1;;;;;9380:14:2;9366:10;:28;9343:51;:79;;;-1:-1:-1;9412:10:2;;-1:-1:-1;;;;;9412:10:2;9398;:24;9343:79;9335:104;;;;;-1:-1:-1;;;9335:104:2;;;;;;;;;;;;-1:-1:-1;;;9335:104:2;;;;;;;;;;;;;;;9462:1;9453:6;:10;9445:27;;;;;-1:-1:-1;;;9445:27:2;;;;;;;;;;;;;;;-1:-1:-1;;;9445:27:2;;;;;;;;;;;;;;;9478:29;:38;9261:260::o;8841:202::-;8922:5;;;;;-1:-1:-1;;;;;8922:5:2;8908:10;:19;;:51;;-1:-1:-1;8945:14:2;;-1:-1:-1;;;;;8945:14:2;8931:10;:28;8908:51;:79;;;-1:-1:-1;8977:10:2;;-1:-1:-1;;;;;8977:10:2;8963;:24;8908:79;8900:104;;;;;-1:-1:-1;;;8900:104:2;;;;;;;;;;;;-1:-1:-1;;;8900:104:2;;;;;;;;;;;;;;;9010:17;:28;8841:202::o;6931:301::-;7021:10;;-1:-1:-1;;;;;7021:10:2;7007;:24;6999:49;;;;;-1:-1:-1;;;6999:49:2;;;;;;;;;;;;-1:-1:-1;;;6999:49:2;;;;;;;;;;;;;;;7071:1;7062:6;:10;7054:27;;;;;-1:-1:-1;;;7054:27:2;;;;;;;;;;;;;;;-1:-1:-1;;;7054:27:2;;;;;;;;;;;;;;;7112:6;7095:13;;:23;;7087:46;;;;;-1:-1:-1;;;7087:46:2;;;;;;;;;;;;-1:-1:-1;;;7087:46:2;;;;;;;;;;;;;;;7139:11;;:41;;;-1:-1:-1;;;7139:41:2;;-1:-1:-1;;;;;7139:41:2;;;;;;;;;;;;;;;:11;;;;;:20;;:41;;;;;;;;;;;;;;:11;;:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;7202:13:2;;:25;;7220:6;7202:17;:25::i;:::-;7186:13;:41;-1:-1:-1;;6931:301:2:o;318:20::-;;;;;;-1:-1:-1;;;;;318:20:2;;:::o;17819:304::-;17911:5;;;;;-1:-1:-1;;;;;17911:5:2;17897:10;:19;;:49;;-1:-1:-1;17934:12:2;;-1:-1:-1;;;;;17934:12:2;17920:10;:26;17897:49;:77;;;-1:-1:-1;17964:10:2;;-1:-1:-1;;;;;17964:10:2;17950;:24;17897:77;17889:99;;;;;-1:-1:-1;;;17889:99:2;;;;;;;;;;;;-1:-1:-1;;;17889:99:2;;;;;;;;;;;;;;;17995:15;18013:25;18023:6;18031;18013:9;:25::i;:::-;17995:43;;18069:5;18044:18;18063:2;18044:22;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;18044:22:2;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;18044:22:2;;;;;;;;;;;;;;;;-1:-1:-1;18044:22:2;;;;;;;;;;:30;;-1:-1:-1;;18044:30:2;;;;;;;;;;;-1:-1:-1;;18097:14:2;;:21;;-1:-1:-1;18097:18:2;:21::i;294:20::-;;;;;;:::o;1297:46::-;;;;;;;;;;;;;;;:::o;18935:429::-;18992:15;19010:20;19020:6;19028:1;19010:9;:20::i;:::-;18992:38;;19067:24;:32;19092:6;-1:-1:-1;;;;;19067:32:2;-1:-1:-1;;;;;19067:32:2;;;;;;;;;;;;;19036:24;19061:2;19036:28;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;19036:28:2;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;19036:28:2;;;;;;;;;;;;;;;;-1:-1:-1;19036:28:2;;;;;;;;;;;:63;;;;-1:-1:-1;;;;;19133:19:2;;-1:-1:-1;19133:19:2;;;:11;:19;;;;;;;19105:25;;19133:19;;19105:21;;:25;;-1:-1:-1;19036:28:2;-1:-1:-1;19036:28:2;;19105:25;;;;;19036:28;19105:25;;;;;;;;;;;-1:-1:-1;;19105:25:2;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;19105:25:2;;;;;;;;;;;;;;;;-1:-1:-1;19105:25:2;;;;;;;;;;;:47;;;;-1:-1:-1;;;;;19182:15:2;;-1:-1:-1;19182:15:2;;;:7;:15;;;;;;;19158:21;;19182:15;;19158:17;;:21;;-1:-1:-1;19105:25:2;-1:-1:-1;19105:25:2;;19158:21;;;;;19105:25;19158:21;;;;;;;;;;;-1:-1:-1;;19158:21:2;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;19158:21:2;;;;;;;;;;;;;;;;-1:-1:-1;19158:21:2;;;;;;;;;;;:39;;;;-1:-1:-1;;;;;19227:20:2;;-1:-1:-1;19227:20:2;;;:12;:20;;;;;;;19203;;19227;;;;19226:21;;19203:16;;:20;;-1:-1:-1;19158:21:2;-1:-1:-1;19158:21:2;;19203:20;;;;;19158:21;19203:20;;;;;;;;;;;-1:-1:-1;;19203:20:2;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;19203:20:2;;;;;;;;;;;;;;;;-1:-1:-1;19203:20:2;;;;;;;;;;:44;;-1:-1:-1;;19203:44:2;;;;;;;;;;;-1:-1:-1;;19257:20:2;;:16;;:20;;19203;;;19257;;;;19203;19257;;;;;;;;;;;-1:-1:-1;;19257:20:2;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;19257:20:2;;;;;;;;;;;;;;;;-1:-1:-1;19257:20:2;;;;;;;;;;;;;19253:70;;-1:-1:-1;19253:70:2;;-1:-1:-1;19253:70:2;19312:4;19287:18;19306:2;19287:22;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;19287:22:2;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;19287:22:2;;;;;;;;;;;;;;;;-1:-1:-1;19287:22:2;;;;;;;;;;:29;;-1:-1:-1;;19287:29:2;;;;;;;;;;;-1:-1:-1;;19253:70:2;-1:-1:-1;;19344:10:2;19328:27;;;;:15;:27;;;;;:31;;-1:-1:-1;;;;;;19328:31:2;19358:1;19328:31;;;18935:429::o;882:176:1:-;940:7;971:5;;;994:6;;;;986:46;;;;;-1:-1:-1;;;986:46:1;;;;;;;;;;;;;;;;;;;;;;;;;;;1329:134;1387:7;1413:43;1417:1;1420;1413:43;;;;;;;;;;;;;;;;;:3;:43::i;2188:459::-;2246:7;2487:6;2483:45;;-1:-1:-1;2516:1:1;2509:8;;2483:45;2550:5;;;2554:1;2550;:5;:1;2573:5;;;;;:10;2565:56;;;;-1:-1:-1;;;2565:56:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3109:130;3167:7;3193:39;3197:1;3200;3193:39;;;;;;;;;;;;;;;;;:3;:39::i;1754:187::-;1840:7;1875:12;1867:6;;;;1859:29;;;;-1:-1:-1;;;1859:29:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;1910:5:1;;;1754:187::o;3721:272::-;3807:7;3841:12;3834:5;3826:28;;;;-1:-1:-1;;;3826:28:1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3864:9;3880:1;3876;:5;;;;;;;3721:272;-1:-1:-1;;;;;3721:272:1:o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;

Swarm Source

ipfs://9d355198942c717e93719467041db95718946b20ee63726e08bfd0d651104845

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.